sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongodb vælg felt for at returnere indlejret dokument i array

Ja, men ikke som du vil. Hvis du gør følgende, får du kun det første element i arrayet tilbage:

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

Men det, du virkelig ønsker, er noget, der ser ud som følgende:

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

Det virker selvfølgelig ikke i MongoDB.

Ser på dit andet spørgsmål , dette er en af ​​grundene til at bruge det "indlejrede objekt" i stedet for "arrayet af objekter". Med "embedded object" kunne du gøre følgende:

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

Dette lader dig vælge netop de "indlejrede objekter", du har brug for.

Sagen med MongoDB er, at det overordnede dokument altid er hentes. Forespørgsler returnerer dokumenter på øverste niveau. Dette er bagt ind i hele arkitekturen. Selvom du kun anmoder om et udsnit af dokumentet, skal serveren stadig indlæse hele dokumentet i hukommelsen, før du får serveret det ønskede stykke.

Den eneste måde at undgå dette på kan være det nye Aggregation Framework , men det er endnu ikke i staldgrenen.



  1. Indfødt driverfund fra Mongoose-model returnerer ikke markør

  2. Er der noget multicore-udnyttende NoSQL-system?

  3. Mongodb 3.6.0-rc3 array-filtre virker ikke?

  4. Sådan deserialiserer du et BsonDocument-objekt tilbage til klassen