2014-12-02 18 views
6

Ich möchte wie etwas tun:Abfragen andere Sammlung innerhalb forEach

db.ratings.find().forEach(function(doc){ 

    var item = db.items.find({_id: doc.item_id}) 
    var ry = item.detail.ry 
    db.ratings.update(doc,{$set: {itd: ry}}) 

}) 

Das Problem ist, dass db.items.find({_id: doc.item_id}) etwas zurückkehrt, auf die ich nicht direkt aufrufen Eigenschaften Dokument kann. Welches wäre der richtige Weg, dies zu tun? Vielen Dank!

db.items:

{ 
    "_id" : ObjectId("5461c8f0426f727f16000000"), 
    "n" : "The Shawshank Redemption", 
    "detail" : { 
     "ry": 1992 
    } 
} 
+1

Verwenden Sie db.items.findOne ({_ id: doc.item_id}); – Disposer

Antwort

13

Die find() Funktion ein cursor zurückgibt, müssen Sie es wiederholen:

Wenn die find() Methode „gibt Dokumente zurück,“ das Verfahren tatsächlich ist Zurückgeben eines Cursors an die Dokumente

Ihr Code, aktualisiert:

db.ratings.find().forEach(function(doc){ 

    db.items.find({_id: doc.item_id}).forEach(function(item){ 
    var ry = item.detail.ry; 
    db.ratings.update(doc,{$set: {itd: ry}}); 
    }) 
}) 

oder Sie können findOne() verwenden, die eines der übereinstimmenden Dokumente zurückgibt.

db.ratings.find().forEach(function(doc){ 

    var item = db.items.findOne({_id: doc.item_id}) 
    var ry = item.detail.ry 
    db.ratings.update(doc,{$set: {itd: ry}}) 

}) 
+1

Genie! Danke –

+0

@BatScream Wie man doppelten Fehler behandelt? – 6339

Verwandte Themen