我目前正在开发一个简单的产品,该产品具有用于市场网站的报价集合。经过一些考虑,我有点被困住了。
我必须为此集合创建一些过滤器,例如分页,按价格,按商店,按产品类别(按库存)。就像任何电子商务网站一样。
因为有很多方式来组织此模型。
1 /每个文档都是一种产品,具有一系列类似的报价:
{
"_id" : ObjectId("5bbdd5bbbec13b3d867ac672"),
"type" : "IMES",
"sku" : "XXXXXX",
"label" : "Briquet",
"price" : {
"value" : 305 (default price in centimes)
},
offers: [
{
"offerId" : "1825957",
"price" : {
"value" : 3830,
"vat" : 766
},
"stock": 12,
"shop" : {
"shopId" : "2000",
"shopName" : "XXXXXX"
}
},
{
"offerId" : "22222",
"price" : {
"value" : 22323,
"vat" : 500
},
"stock": 12,
"shop" : {
"shopId" : "2000",
"shopName" : "XXXXX"
}
}
]
}
这种方式允许不重复数据。 但是经过几次测试,正确管理offers数组非常烦人。
2 /每个文档都是一个产品,且仅一个报价。
{
"_id" : ObjectId("5bbdd5bbbec13b3d867ac672"),
"type" : "IMES",
"sku" : "XXXXXX",
"label" : "Briquet",
"price" : {
"value" : 305 (default price in centimes)
},
offer:
{
"offerId" : "1825957",
"price" : {
"value" : 3830,
"vat" : 766
},
"stock": 12,
"shop" : {
"shopId" : "2000",
"shopName" : "XXXXXX"
}
}
}
}
这种方式类似于“展开”聚合,它允许具有最低级别的数据,而无需任何数组。但是,我们正在复制产品。对于产品的每个报价,我都会有一个包含产品和报价的文档。我想这真的很糟糕,因为如果必须更新产品,则必须更新此集合中的“ x”个文档。
3 /要将数据模型分为2个不同的集合:
集合 产品 ,其中包含以下对象:
{ “ _id”:ObjectId(“ 5bbdd5bbbec13b3d867ac672”), “ type”:“ IMES”, “ sku”:“ XXXXXX”, “ label”:“ Briquet”, “价钱” : { “值”:305(默认价格,以厘米为单位) } }
收藏 报价 ,对象如下:
{ “ offerId”:“ 1825957”, “价钱” : { “值”:3830, “ vat”:766 }, “库存”:12 “商店”:{ “ shopId”:“ 2000”, “ shopName”:“ XXXXXX” } }
我们不再重复数据。这是一个好点。但是,要请求那两个集合,即使使用 $ lookup (?)也很困难 这种方法是一种SQL方法。
4 /我发现的最后一种方式是,我们仅保留产品sku,并且仅提供类似2 /的报价,但是这种方式对我来说毫无用处,因为我们需要拥有另一种收集产品来保留所有产品属性。
所以我的问题是:
为了拥有最佳的模型数据组织,哪种方法更好?
感谢您的预先答复。