2016-07-14 5 views
0

別のコレクションで選択された値でコレクションのフィールドを更新する必要があります。私は、他のコレクションの新しい値を見つけるために更新する必要のあるフィールドの値を使用します。MongoDBの更新値と別のコレクションで実行されたクエリの結果

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つのコレクション内のドキュメント? 2つのコレクションのサンプルと期待される結果を見せてください。 – styvane

+0

Organizationsコレクションのフィールド「Country」をCountriesコレクションで実行されたクエリの結果で更新したいとします。結果は「フィリピンフィリピン」 – Karine

+0

あなたの書類を見ることができますか? – styvane

答えて

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

それは私が 'フィリピン シンガポール 香港 香港 シンガポール 香港 香港 香港 香港 香港 香港 シンガポール シンガポール シンガポール パキスタンプリントでそれを注意することができますように動作していないようです シンガポール シンガポール 香港ですが、私は 'findOne()'を使って解決策を見つけました。 – Karine

関連する問題