sql >> Database >  >> NoSQL >> MongoDB

Mongodb selecteer veld om ingesloten document in array te retourneren

Ja, maar niet zoals je wilt. Als je het volgende doet, krijg je alleen het eerste element van de array terug:

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

Wat u echter echt wilt, is iets dat er als volgt uitziet:

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

Dat werkt natuurlijk niet in MongoDB.

Kijkend naar uw andere vraag , is dit een van de redenen om het "embedded object" te gebruiken in plaats van de "array of objects". Met "embedded object" kunt u het volgende doen:

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

Hiermee kun je alleen de "ingesloten objecten" kiezen die je nodig hebt.

Het ding met MongoDB is dat het bovenliggende document altijd . is gehaald. Query's retourneren documenten op het hoogste niveau. Dit zit ingebakken in de hele architectuur. Zelfs als u slechts een deel van het document aanvraagt, moet de server nog steeds het hele document in het geheugen laden voordat u het gevraagde stuk krijgt.

De enige manier om dit te omzeilen is misschien het nieuwe Aggregation Framework , maar dat is nog niet in de stabiele tak.



  1. mongodb db.collection.find({}) doet niets voorbij .limit(101)

  2. Gedeeltelijke update van een subdocument met nodejs/mongoose

  3. God-configuratiebestand om bestaande processen te bewaken?

  4. Toepassingen implementeren op CDP Operational Database (COD)