【问题标题】:How to update multiple objects in the array in mongoDB?如何更新MongoDB中数组中的多个对象?
【发布时间】:2021-09-28 00:15:47
【问题描述】:

如何在 MongoDB 中更新数组中的多个对象?假设我正在从客户端检索需要更改的标题数组。

例子:

来自客户端的数据:

[0,3]

MongoDB 中的文档:

[
  {
    _id: 0,
    dishes: [
      { title: 0, in_stock: true },
      { title: 1, in_stock: false },
      { title: 2, in_stock: true },
      { title: 3, in_stock: false },
    ],
  },
];

结果应该是:

[
  {
    _id: 0,
    dishes: [
      { title: 0, in_stock: false },
      { title: 1, in_stock: false },
      { title: 2, in_stock: true },
      { title: 3, in_stock: true },
    ],
  },
];

【问题讨论】:

    标签: javascript node.js mongodb mongodb-query


    【解决方案1】:

    您可以在更新子句中简单地放置一个聚合管道。

    db.collection.update({},
    [
      {
        "$addFields": {
          "dishes": {
            "$map": {
              "input": "$dishes",
              "as": "d",
              "in": {
                "$cond": {
                  "if": {
                    "$in": [
                      "$$d.title",
                      [
                        0,
                        3
                      ]
                    ]
                  },
                  "then": {
                    title: "$$d.title",
                    in_stock: {
                      "$not": [
                        "$$d.in_stock"
                      ]
                    }
                  },
                  "else": "$$d"
                }
              }
            }
          }
        }
      }
    ])
    

    这是Mongo playground 供您参考。

    【讨论】:

    • 谢谢!这样可行。但是,是否可以克隆对象的其他字段?标题:“$$d.title”
    • 只需操作 $cond 中的 2 个案例,它们是映射原始数组的真假案例
    猜你喜欢
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 2017-11-23
    • 2018-09-05
    • 1970-01-01
    相关资源
    最近更新 更多