MongoDB更新值与在另一个集合上执行查询的结果

时间:2016-07-14 11:32:22

标签: mongodb mongodb-query

我需要使用在另一个集合中选择的值更新集合的字段。我使用需要更新的字段的值来查找其他集合中的新值。

我试试这个:

 db.Organizations.find({}).forEach( function(doc) {
    print(doc.Country.DisplayName);
    var c = db.Countries.find({"DisplayName": doc.Country.DisplayName});
    doc.Country = c;
    print(doc.Country.DisplayName);
});

结果:

Philippines 
[unknown type]

我怎样才能做到这一点? 提前谢谢。

编辑: 我找到了使用findOne()的解决方案(我的收藏中没有重复的国家/地区)

var index = 0;
db.Organizations.find({"Country": { $ne: null }}).forEach( function(doc) {
   print(index + ': ' + doc.Country.DisplayName);

  var myDoc = db.Countries.findOne({"DisplayName": doc.Country.DisplayName});
  if (myDoc){
        print(index + ': ' + myDoc);
        doc.Country = myDoc;
        print(index + ': ' + doc.Country.DisplayName);
   }

  index++;

});

结果:

0: Philippines 0: [object BSON] 0: Philippines 1: Singapore 1: [object BSON] 1: Singapore

1 个答案:

答案 0 :(得分:1)

第二个find(...)也是一个异步操作,所以你必须传递一个回调,如下所示:

db.Organizations.find({}).forEach( function(doc) {
    print(doc.Country.DisplayName);
    db.Countries.find({"DisplayName": doc.Country.DisplayName}, function(err, cursor) {
        doc.Country = cursor.next();
        print(doc.Country.DisplayName);        
    });
});