2016-09-04 2 views
0

Ich verwende Subdokumente in Mongodb.Positionsoperator für mehrere Ebenen von Filialdokumenten verwenden

Mit einer Ebene von Unterdokumenten, kann ich Dokumente aktualisieren mit

Parent.findOneAndUpdate({ _id: parentId, 'children._id': childId }, { 
    $set: { 
    'children.$.name': name 
    } 
}, (err, doc) => { 
    ... 
}); 

aber ich habe Probleme für eine andere Ebene der Unterdokumente das gleiche zu tun, das heißt

Parent.findOneAndUpdate({ _id: parentId, 'children._id': childId, 'children.grandchildren._id': grandchildId }, { 
    $set: { 
    'children.$.grandchildren.$.name': name 
    } 
}, (err, doc) => { 
    ... 
}); 

die Positions Ist Operator ($) beschränkt auf nur 1 Ebene Filialdokumente?

Antwort

0

Positionsoperator ($) unterstützt nur eine Ebene und auch das erste passende Element. Als eine Abhilfe, was Sie tun dies kann,

$set: { 'children.$.grandchildren.0.name': name }

ich denke, das Problem mehr ist deutlich erklärt here

+0

Oh. Vielen Dank. Aber nehmen Sie nicht Ihre Workaround nur das allererste Objekt in der Enkelkinder-Array anstelle der, die mit meiner "EnkelkindId" übereinstimmt? – Jamgreen

+0

Ja, es würde das allererste Objekt auswählen, wie Sie es erwähnt haben. Du kannst aber die Funktion ** foreach ** des Mongodb verwenden und den Namen jedes Enkels aktualisieren, der der 'grandchildId' entspricht. Der Link, den ich mit meiner Antwort versehen habe, hat auch eine Antwort, auf die du dich beziehen kannst. [Hier ist der Link für diese Antwort] (http://stackoverflow.com/a/18721690/4334340) –

Verwandte Themen