首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB电子商务产品文档设计

MongoDB电子商务产品文档设计
EN

Stack Overflow用户
提问于 2012-03-03 22:16:44
回答 1查看 1.9K关注 0票数 4

我正在建设一个电子商务网站,并决定尝试MongoDB。我的目标是实现完全的灵活性,这样,我最终就不会被限制在销售特定的产品上,因为系统最初是如何组合在一起的。

因此,以灵活性为目标,我必须能够创建基于属性的产品。外汇。颜色、制造、速度等所有属性必须是可选的。用户可以创建新的属性,有些是默认的系统属性(不可删除)。根据属性的配置,它将被分层为“基本”或可配置的产品。

  • 在目录中,我想用颜色属性来分割产品,这样每种颜色都呈现为一个单独的产品。使用我当前的文档设计,我能用MongoDB实现这一点吗?
  • --我得出的结论是,在从MongoDB中选择产品时,在提交之前,我必须“填充”我的文档,或者做大量的数据映射。我错了吗?
  • 考虑到一些产品有选择(颜色、尺寸)和其他产品没有选择,那么做库存管理的最好和最有效的方法是什么?

如我的例子所示,我的普通属性存储在属性下,“必需”属性存储在文档选项下。

我的产品文档能以某种方式在使事情变得更简单方面得到改进吗?因为我发现我的想法在使用关系数据库时被“损坏”了,所以我担心我要么做完了,要么做得不够好。

诚挚的问候

代码语言:javascript
复制
(
            [type] => Product
            [sku] => elin/4191
            [name] => Array
                (
                    [da] => Sko - Elin
                    [en] => Shoes - Elin
                )

            [url_key] => Array
                (
                    [da] => sko-elin
                    [en] => 1-744
                )

            [categories] => Array
                (
                )

            [shops] => Array
                (
                    [0] => 1
                )

            [images] => Array
                (
                    [0] => test.jpg
                    [1] => test1.jpg
                )

            [options] => Array
                (
                    [0] => Array
                        (
                            [color] => Array
                                (
                                    [da] => Sort
                                    [en] => Black
                                )

                            [size] => Array
                                (
                                    [da] => Lille
                                    [en] => Small
                                )

                            [shipping] => Array
                                (
                                    [weight] => 0
                                    [width] => 0
                                    [height] => 0
                                    [depth] => 0
                                )

                            [pricing] => Array
                                (
                                    [price] => 899
                                    [retail] => 0
                                    [cost] => 333
                                    [vat] => 25
                                    [special] => Array
                                        (
                                            [price] => 0
                                            [from] => new Date()
                                            [to] => new Date()
                                            [pct_savings] => 100
                                            [savings] => 0
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [color] => Array
                                (
                                    [da] => Sort
                                    [en] => Black
                                )

                            [size] => Array
                                (
                                    [da] => Medium
                                    [en] => Medium
                                )

                            [shipping] => Array
                                (
                                    [weight] => 0
                                    [width] => 0
                                    [height] => 0
                                    [depth] => 0
                                )

                            [pricing] => Array
                                (
                                    [price] => 899
                                    [retail] => 0
                                    [cost] => 333
                                    [vat] => 25
                                    [special] => Array
                                        (
                                            [price] => 0
                                            [from] => new Date()
                                            [to] => new Date()
                                            [pct_savings] => 100
                                            [savings] => 0
                                        )

                                )

                        )

                    [2] => Array
                        (
                            [color] => Array
                                (
                                    [da] => Orange
                                    [en] => Orange
                                )

                            [size] => Array
                                (
                                    [da] => Lille
                                    [en] => Small
                                )

                            [shipping] => Array
                                (
                                    [weight] => 0
                                    [width] => 0
                                    [height] => 0
                                    [depth] => 0
                                )

                            [pricing] => Array
                                (
                                    [price] => 899
                                    [retail] => 0
                                    [cost] => 333
                                    [vat] => 25
                                    [special] => Array
                                        (
                                            [price] => 0
                                            [from] => new Date()
                                            [to] => new Date()
                                            [pct_savings] => 100
                                            [savings] => 0
                                        )

                                )

                        )

                    [3] => Array
                        (
                            [color] => Array
                                (
                                    [da] => Orange
                                    [en] => Orange
                                )

                            [size] => Array
                                (
                                    [da] => Medium
                                    [en] => Medium
                                )

                            [shipping] => Array
                                (
                                    [weight] => 0
                                    [width] => 0
                                    [height] => 0
                                    [depth] => 0
                                )

                            [pricing] => Array
                                (
                                    [price] => 899
                                    [retail] => 0
                                    [cost] => 333
                                    [vat] => 25
                                    [special] => Array
                                        (
                                            [price] => 0
                                            [from] => new Date()
                                            [to] => new Date()
                                            [pct_savings] => 100
                                            [savings] => 0
                                        )

                                )

                        )

                )

            [attributes] => Array
                (
                    [designer] => Array
                        (
                            [name] => Array
                                (
                                    [da] => Manufacturer
                                    [en] => Manufacturer
                                )

                            [type] => text
                            [visible] => 1
                            [required] => false
                            [value] => Array
                                (
                                    [da] => FunnyShirts
                                    [en] => FunnyShirts
                                )

                        )

                )

        )
EN

回答 1

Stack Overflow用户

发布于 2012-03-05 19:14:44

我认为您的设计会很好,尽管我不认为需要将必需的和可选的属性分离到单独的子文档中。

我不知道PHP,但是要在显示时将每种颜色作为一个单独的产品来处理,您可以这样做:

代码语言:javascript
复制
product = db.products.findOne({sku: "..."})
for color in product.colors:
    # render the product with the color

没有必要“填写”您的文档--我想您是指为每个可能的属性存储空值吗?应用程序代码应该简单地检查文档中是否存在一个可选的值,并在此基础上做出其呈现或业务逻辑决策。MongoDB的优势之一是灵活性。并不是所有的文件都是一样的。应该编写应用程序代码来处理没有所有可能字段的文档。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9550361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档