MongoDB 使用新的文档数组更新文档数组

乔治

可以插入对象数组,但不能更新它们。您必须删除它们,然后插入它们。我不想删除然后插入它们,因为如果删除顺利但插入出错,数据就会丢失。如何正确更新集合中的数组(所有文档)?

插入文档数组:

collection.insert(arrToInsert, function(err, results){
    console.log(results.ops);
});

更新插入的数组(不好):

collection.remove({}, function(err){
    collection.insert(arrUpdated, function(err, result) {
        console.log(results.ops);
    });
});

我曾尝试使用 collection.update 但这不允许数组。

编辑:例如:插入这个数组:

[
    {_id:0,name:"Harry"},
    {_id:1,name:"Jacob"},
    {_id:2,name:"Bob"}
]

然后,将其更改为:

[
    {_id:0,name:"Dennis"},
    {_id:1,name:"Peter"},
    {_id:2,name:"Ghandi"}
]

我的实际情况有点复杂,因为数组有另一个键/值对,并且可以通过多种方式进行更改。

尼尔伦

您的意思是.bulkWrite(),它允许在单个批处理请求中对同一集合进行多个更新操作(插入/更新/删除)。它实际上是现代驱动程序在使用文档数组调用.insert()时真正调用.insertMany()的内容。

您的新更新将是:

var arrToUpdate = [
    {_id:0,name:"Dennis"},
    {_id:1,name:"Peter"},
    {_id:2,name:"Ghandi"}
];

collection.bulkWrite(
  arrToUpdate.map( d => ({
    "replaceOne": {
      "filter": { "_id": d._id },
      "replacement": d
    }
  })),
  function(err,result) {
    console.log(result)
  }
)

WherereplaceOne本质上是一个“更新”,不使用任何修饰符,例如$set.

关键是,就像.insert()数组 or 一样.insertMany(),数据库只接收一个请求和响应,但该请求中有多个操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章