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

Sådan returneres kun de indlejrede dokumenter i et array fra alle dokumenter

Du kan gøre dette ved at bruge .aggregate() og overvejende $unwind rørledningsoperatør:

I moderne MongoDB 3.4 og nyere kan du bruge sammen med $replaceRoot

Model.aggregate([
  { "$unwind": "$books" },
  { "$replaceRoot": { "newRoot": "$books" } }
],function(err,results) {

})

I tidligere versioner angiver du alle felter med $project :

Model.aggregate([
  { "$unwind": "$books" },
  { "$project": {
    "_id": "$books._id",
    "pages": "$books.pages",
    "title": "$books.title"
  }}
],function(err,results) {

})

$unwind er det, du bruger til at dekonstruere eller "denormalisere" array-indgange til behandling. Dette skaber effektivt en kopi af hele dokumentet for hvert medlem af arrayet.

Resten af ​​opgaven handler om at returnere "kun" de felter, der er til stede i arrayet.

Det er dog ikke særlig klogt at gøre. Hvis din hensigt kun er at returnere indhold, der er indlejret i en række af et dokument, ville du være bedre stillet at lægge dette indhold i en separat samling i stedet.

Det er langt bedre for ydeevnen, at skille alle dokumenter fra en samling fra hinanden med aggregeringsrammerne, bare for kun at vise disse dokumenter fra arrayet.



  1. Redis failover med StackExchange / Sentinel fra C#

  2. Tornado-fejl:[Errno 24] Fejl ved for mange åbne filer

  3. Apache HBase-regionopdeling og sammenlægning

  4. Er redis-operationer på datastrukturer trådsikre