MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb-Auswahlfeld, um das eingebettete Dokument im Array zurückzugeben

Ja, aber nicht so, wie Sie es wollen. Wenn Sie Folgendes tun, erhalten Sie nur das erste Element des Arrays zurück:

coll.find({_id:'2'}, { 'objects.0': 1})

Was Sie jedoch wirklich wollen, ist etwas, das wie folgt aussieht:

coll.find({_id:'2', 'objects._id': '3'}, { 'objects.$' : 1})

Das funktioniert natürlich nicht wirklich in MongoDB.

Sehen Sie sich Ihre andere Frage an , dies ist einer der Gründe, das "eingebettete Objekt" anstelle des "Arrays von Objekten" zu verwenden. Mit "eingebettetes Objekt" könnten Sie Folgendes tun:

coll.find({_id:'2'}, {'objects.3': 1}) // where 3 is the id of the third object

Auf diese Weise können Sie genau die "eingebetteten Objekte" auswählen, die Sie benötigen.

Die Sache mit MongoDB ist, dass das übergeordnete Dokument immer ist geholt. Abfragen geben Dokumente der obersten Ebene zurück. Dies ist in die gesamte Architektur eingebrannt. Selbst wenn Sie nur einen Teil des Dokuments anfordern, muss der Server immer noch das gesamte Dokument in den Speicher laden, bevor er Ihnen das angeforderte Stück liefert.

Der einzige Weg, dies zu umgehen, könnte das neue Aggregation Framework sein , aber das ist noch nicht im stabilen Zweig.