增加嵌套数组中的多个值

时间:2018-02-27 03:16:28

标签: mongodb mongodb-query

我有一个简单的产品架构

{
  "_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

1 个答案:

答案 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' }] })