簡體   English   中英

如何在MongoDB中使用多個條件更新多個文檔?

[英]How to update multiple documents with multiple condtions in MongoDB?

我有一個包含各種文檔的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中是否可行的東西?

首先,您可能需要將汽車ID String類型轉換為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);
});

進行更新時,嘗試在查找查詢中使用mongodb的$in 請參閱下面的查詢:

Model.update({_id : {$in: req.body[i].cars}}, 
 {$set : {name : req.body[i].name}},
 {multi : true});

因此,這種方式必須運行2個查詢來更新名稱。

請參閱$ in-doc以了解有關用途的更多信息。

希望這會幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM