我是MongoDB的新手,所以我只是想得到一些关于我的模式的外部评论。我正在试着建立一个类似于转移体的东西。我将为许多不同的商家销售产品,其中一些商家可能会有相同的产品。我还应该补充说,我是使用Mongoid在Rails中构建的。
这是我的产品文档当前的样子。
{
"_id" : ObjectId("4f4c8ad406164f46f1000085"),
"created_at" : ISODate("2012-02-28T08:05:40Z"),
"manufacturer_id" : ObjectId("4f4c88bd06164f46f1000068"),
"manufacturer_name" : "Minka Lavery",
"manufacturer_sku" : null,
"merchant_products" : [
{
"_id" : ObjectId("4f4c8ad406164f46f1000086"),
"_type" : "CommissionJunctionProduct",
"merchant_name" : "1800lighting.com",
"merchant_id" : ObjectId("4f4c8ad406165f46f1000086"),
"sku" : "8875981",
"buy_url" : "http://www.foobar.com",
"price" : 10.80,
"in_stock" : true,
"updated_at" : ISODate("2012-02-28T08:05:40Z"),
"created_at" : ISODate("2012-02-28T08:05:40Z")
}
],
"name" : "Minka Lavery 8717-44 Bridgeport 1 Light Outdoor",
"updated_at" : ISODate("2012-02-28T08:05:40Z")
}
它有很多商品在里面。每个产品数据源都有自己的_type。
我还引用了其他文档,如Merchants和Manufacturer。这些只是用作中心位置,我可以在这里更新它们的显示名称。在制造商的情况下,许多商家可能会给它们命名略有不同,所以我保留了一个别名数组,以便我知道在产品中使用什么显示名称。我对Merchants有一个类似的设置,虽然他们没有别名,但我仍然希望能够自定义他们的名称,并让它在产品中传播。
当我最终将产品展示给用户时,我会遍历所有的商业产品,并找出哪一个是最适合展示给用户的。我正在考虑有一个后台脚本,只需将最好的merchant_product移到数组的第一个点。
我在这个设置中注意到的一件事是创建merchant_products,并且更新它们似乎有点困难。这并不经常发生,但逻辑很复杂,以确保我不会创建重复的产品,并且我能够更新价格。此外,我也不能真正展示一个商家拥有的所有商家产品。
我可以更深入地了解我所做的事情,但我认为我可能会从其他人如何模拟这样的东西中学到更多。
发布于 2012-03-01 00:06:44
看看Schema.org吧。那里定义的模型是面向文档的,我发现将它们与MongoDB联系起来非常容易。下面是一个产品的建模方式。
http://www.schema.org/Product
您将注意到的是Product有优惠,可以来自不同的商家。您可以将优惠存储在不同的集合中,然后单独管理它们。这也将帮助您通过查询直接根据不同的标准(位置、价格或商家评级)对优惠进行排序。
您不必在Product集合中存储Dbref of Offer。只需在每个优惠文档中存储产品id即可。
https://stackoverflow.com/questions/9492298
复制相似问题