mongodb - 增加嵌套数组中的多个值

标签 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 件 M 号红色商品。如何$inc每个选项和产品本身的购买值(value)?

P.S 我正在运行 mongo 版本 3.2.4

最佳答案

看来更新可能是您唯一的选择。如果您选择更新,可以在 mongo 3.6 版本中尝试如下操作。

查找具有过滤条件和更新的文档,其中包括新的positional identifierupdate 方法中更新数组中的匹配元素。

使用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' }] })

关于mongodb - 增加嵌套数组中的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49000538/

相关文章:

Mongodb 按数组元素聚合组

javascript - 从 JSON 对象数组中获取与条件匹配的文档

javascript - 如何使用聚合MongoDB获取数据Mongo数据

node.js - 使用 `clone` 和 `Object.assign` 方法在 Mongoose 中克隆/扩展模式有什么区别?

node.js - 如何使用 NodeJS 向 mongodb 执行批量插入

mongodb - 如何替换mongodb中所有匹配的子字符串

javascript - 将 RSS 提要导入 MongoDB

ruby-on-rails - 如果我的模型不代表不同的想法,而是代表具有重叠字段的不同类型,我应该在应用程序中使用什么数据库?

javascript - 如何将 mongoDB 对象传递给 Javascript/JS.Node 中的所有原型(prototype)函数?

node.js - 如何判断用户是否是第一次登录?