我有一个简单的产品架构
{
"_id": "123",
"purchased": 0,
"options": [
{
"name": "Size",
"options": [
{
"name": "S",
"purchased": 0
},
{
"name": "M",
"purchased": 0
}
]
},
{
"name": "Color",
"options": [
{
"name": "Red",
"purchased": 0
},
{
"name": "Blue",
"purchased": 0
}
]
}
]
}
假设客户购买了1件Size M color Red。我如何$inc
每个选项和产品本身的购买价值?
P.S我正在运行mongo版本3.2.4
答案 0 :(得分:2)
看起来更新可能是您唯一的选择。如果您选择更新,可以在mongo 3.6版本中尝试类似下面的内容。
查找包含filter
条件的文档和update
包含新positional identifier的文档,以更新update
方法中数组中的匹配元素。
使用arrayFilter
选项在嵌套数组上应用查询条件,以控制要更新的元素。
您可能需要针对每种尺寸和颜色进行两次更新。不要认为您可以根据不同的标准更新同一阵列的多个元素。
尺寸
db.getCollection('col').update( {} , { '$inc': { 'purchased': 1, 'options.$[type].options.$[option]purchased': 1 } }, { arrayFilters:[ { 'type.name': ‘Size' }, {'option.name':'S' }] })
对于颜色
db.getCollection('col').update( {} , { '$inc': { 'purchased': 1, 'options.$[type].options.$[option]purchased': 1 } }, { arrayFilters:[ { 'type.name': ‘Color' }, {'option.name':'Red' }] })