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

Javascript MongoDB使用新的文档数组更新文档数组,javascript,mongodb,Javascript,Mongodb,可以插入对象数组,但不能更新它们。您必须先删除它们,然后再插入它们。我不想先删除然后再插入它们,因为如果删除进行得很顺利,但插入有错误,那么数据就会丢失。如何正确更新集合中的数组(所有文档) 插入文档数组: collection.insert(arrToInsert, function(err, results){ console.log(results.ops); }); 正在更新插入的阵列(不好): 我已尝试使用collection.update,但这不允许使用数组 编辑: 例如:

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

插入文档数组:

collection.insert(arrToInsert, function(err, results){
    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"}
]
我的实际情况有点复杂,因为数组有另一个键/值对,可以通过多种方式进行更改。

您的意思是,它允许在单个批处理请求中对同一集合执行多个更新操作(插入/更新/删除)。它实际上是现代驱动程序在使用文档数组调用
.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)
  }
)
其中本质上是一个“更新”,不使用任何修饰符,如
$set


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

很难说清您在做什么,因为您的问题没有用明确的示例来表述。您可能是指使用
.bulkWrite()
执行多个
.update()
操作。一般来说,最好是“展示给我们看”,而不是谈论一些你实际上没有展示的东西,这正是你的问题目前所做的。请参阅帮助中心中的,它为您提供了有关如何构造问题的提示,以便人们理解您的意思以及如何解决问题。但是使用.bulkWrite,数组中的每个对象都必须有一个键,例如{insertOne:{“document”:{u id:0,name:“Dennis”}…这毫无意义,而且我无法使用bulkWritethanks迭代数组中的每个对象,这看起来是正确的。虽然它有语法错误,但括号不正确?@GeorgeCampbell是的,缺少一个括号。这就是我直接键入答案得到的结果。我实际上必须使用collection.find({})获取文档,因为结果没有返回它。@GeorgeCampbell不打算返回它。
insertMany()
这样做的唯一原因是因为您实际提供了要插入的文档,所以它只是将分配的
\u id
值(如果没有提供)映射到您提供的文档上。没有表单“更新”除了
.findAndModify()
变量“return the document.”之外,我可能会添加,因为您提供了文档,那么
.find()
有什么可能的用途呢?您已经知道您发送了什么。下一个问题……如果我将数组更改为空数组[],则会出现错误。“操作无效,未指定任何操作”
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)
  }
)