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

萨拉斯·阿里亚(Saras Arya)

我有一个包含各种文档的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的所有四个文档都将在文档中使用其名称字段进行更新。

现在更新汽车的一种方法是在数组上应用async.each,在这两个文档上应用aysnc.each。那是更长的方法。我希望如果我对这两个数组有一个async.each,并且以某种方式可以使两个文档都局限在一个查询中,这会使代码看起来更优雅。我已经浏览了好几页,仍然找不到想要知道的在mongo中是否可行的东西?

谢沙布·罗伊

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

cars: [ ObjectId'584cf6c126df866138a29408'), ObjectId'5852819e9693c27c136104bd') ]

然后使用$in运算符将其与文档匹配。

可以尝试一下。

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);
});

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章