如何在MongoDB中使用多个条件更新多个文档?

如何在MongoDB中使用多个条件更新多个文档?,mongodb,Mongodb,我有一个MongoDB集合和各种文档。现在,我有了一个要更新的汽车数组中的输入文档ID。像这样的 req.body = { cars: [ '584cf6c126df866138a29408', '5852819e9693c27c136104bd' ], name: 'Home' }, { cars: [ '584d638242795854a091cbbf', '5842e09e372b786355ba50e7' ], name: 'Office' } ] 预期操作 db.c

我有一个MongoDB集合和各种文档。现在,我有了一个要更新的汽车数组中的输入文档ID。像这样的

req.body = 
{ cars: [ '584cf6c126df866138a29408', '5852819e9693c27c136104bd' ],
    name: 'Home' },
{ cars: [ '584d638242795854a091cbbf', '5842e09e372b786355ba50e7' ],
    name: 'Office' } ]
预期操作

db.cars.update({_id : req.body[i].cars}, {name : req.body[i].name}, {new : true});
预期结果
所有四个ID为的文档都会使用文档中的名称字段进行更新

现在更新cars的一种方法是在数组上应用async.each,在这两个文档上应用aysnc.each。这是一个较长的方法。我希望,如果这两个数组各有一个async.each,并且能够以某种方式将两个文档压缩到一个查询中,这将使代码看起来更优雅。
我已经浏览了好几页,仍然没有找到任何东西想知道这在mongo中是否可行?

在执行更新时,尝试在find query中使用mongodb的
$in
。请参阅下面的查询:

Model.update({_id : {$in: req.body[i].cars}}, 
 {$set : {name : req.body[i].name}},
 {multi : true});
因此,通过这种方式,您必须运行2个查询来更新名称

请参阅以了解更多有关使用的信息


希望这能对您有所帮助。

首先,您可能需要将您的汽车ID
String
类型转换为mongodb
ObjectId
,这意味着:

cars: [ ObjectId'584cf6c126df866138a29408'), ObjectId'5852819e9693c27c136104bd') ]
然后在操作符中使用
$与文档匹配

我可以试试这个

var ObjectId = require('mongodb').ObjectID;
var cars = req.body[i].cars.map(function (id) {
  return new ObjectId(id);
})

db.cars.update({_id : {$in: cars}}, 
  {$set : {name : req.body[i].name}},
  {multi : true},
  function(err, docs) {
    console.log(docs);
});

你能提供预期的输出吗?我不确定你想要达到什么目的。如果你尝试@Yogesh$,每个都是一个数组更新操作。我想更新req.body字段中数组表示的每个文档。它也可以在不更改对象Id的情况下工作。正如你所说。。。“may”我认为
new:true
不适用于Mongoose中的更新功能。它适用于findOneAndUpdate()。