我可以在MongoDB中的单个查询中更新不同的文档吗?

时间:2018-12-22 03:25:46

标签: node.js mongodb mongodb-query

我只想通过一个查询来更新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" } ] )

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

2 个答案:

答案 0 :(得分:2)

您可以使用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 } }
      }
    })
  )
})

答案 1 :(得分:0)

使用 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数组