sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb välj fält för att returnera inbäddat dokument i array

Ja, men inte som du vill. Om du gör följande får du bara tillbaka det första elementet i arrayen:

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

Men vad du verkligen vill ha är något som ser ut som följande:

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

Naturligtvis fungerar det faktiskt inte i MongoDB.

Tittar på din andra fråga , detta är en av anledningarna till att använda det "inbäddade objektet" istället för "arrayen av objekt". Med "inbäddat objekt" kan du göra följande:

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

Detta låter dig välja bara de "inbäddade objekt" du behöver.

Grejen med MongoDB är att det överordnade dokumentet alltid är hämtas. Frågor returnerar dokument på toppnivå. Detta är inbakat i hela arkitekturen. Även om du bara begär en del av dokumentet måste servern fortfarande läsa in hela dokumentet i minnet innan du får den begärda delen.

Det enda sättet att kringgå detta kan vara det nya Aggregation Framework , men det är ännu inte i stallgrenen.



  1. Scala - Skapa IndexedDatasetSpark-objekt

  2. MongoDB Handledning:Ansluta till MongoDB i Scala

  3. Hur kan jag få alla dokument-ID i MongoDB?

  4. Hur använder du $set i MongoDB för att uppdatera ett kapslat värde/inbäddat dokument?