我需要使用在另一个集合中选择的值更新集合的字段。我使用需要更新的字段的值来查找其他集合中的新值。
我试试这个:
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
答案 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);
});
});