【问题标题】:Can I update different documents in a single query in MongoDB?我可以在 MongoDB 的单个查询中更新不同的文档吗?
【发布时间】:2018-12-23 12:01:49
【问题描述】:

我想用一个查询更新 MongoDB 中的不同文档。 我现有的数据库集合如下所示:

[ { "_id":"1", "name": null, "Age": null }, { "_id":"2", "name":null, "Age":null}, { "_id":"3", "name":null, "Age": null } ]

我有以下 JSON:

[ { "_id":"1", "name":"Arav", "Age":"25" }, { "_id":"2", "name":"Mohan", "Age":"64" }, { "_id":"3", "name":"Nishant", "Age":"23" } ]

我想知道是否可以通过单个查询使用来自上述 JSON 的相应数据更新所有现有的 3 个文档。比如:

db.products.insert( [ { "_id":"1", "name":"Arav", "Age":"25" }, { "_id":"2", "name":"Mohan", "Age":"64" }, { "_id":"3", "name":"Nishant", "Age":"23" } ] )

问题是它返回重复错误并且如果已经存在则不更新文档。

【问题讨论】:

    标签: node.js mongodb mongodb-query


    【解决方案1】:

    可以使用bulkWrite操作

    假设你有这个 JSON 需要更新

    const array = [
      {
        "_id": "1",
        "name": "Arav",
        "Age": "25"
      },
      {
        "_id": "2",
        "name": "Mohan",
        "Age": "64"
      },
      {
        "_id": "3",
        "name": "Nishant",
        "Age": "23"
      }
    ]
    

    现在使用bulkWrite 查询

    Model.bulkWrite(
      array.map((data) => 
        ({
          updateOne: {
            filter: { _id: data._id },
            update: { $set: { name: data.name, Age: data.age } }
          }
        })
      )
    })
    

    【讨论】:

      【解决方案2】:

      可以使用 insertMany 而不是只使用 insert 的单个查询插入 3 个或更多文档,如下所示 -

      db.products.insertMany( [ { "_id":"1", "name":"Arav", "Age":"25" }, { "_id":"2", "name":" Mohan", "Age":"64" }, { "_id":"3", "name":"Nishant", "Age":"23" } ])。

      insertMany 返回包含以下内容的文档:
      - 如果操作以写入关注运行,则布尔值确认为 true,如果写入关注被禁用,则确认为 false。
      - 每个成功插入的文档 id 的 _id 数组

      【讨论】:

        猜你喜欢
        • 2012-02-24
        • 1970-01-01
        • 2022-10-04
        • 2011-06-02
        • 2013-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多