sql >> Databasteknik >  >> NoSQL >> MongoDB

Så här returnerar du bara de kapslade dokumenten i en array från alla dokument

Du kan göra detta med .aggregate() och främst $unwind pipeline-operatör:

I modern MongoDB 3.4 och senare kan du använda tillsammans med $replaceRoot

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

})

I tidigare versioner specificerar du alla fält med $project :

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

})

$unwind är vad du använder för att dekonstruera eller "denormalisera" arrayposterna för bearbetning. Detta skapar faktiskt en kopia av hela dokumentet för varje medlem i arrayen.

Resten av uppgiften handlar om att returnera "bara" de fält som finns i arrayen.

Det är dock inte särskilt klokt att göra. Om din avsikt är att bara returnera innehåll som är inbäddat i en uppsättning av ett dokument, är det bättre att du lägger det innehållet i en separat samling istället.

Det är mycket bättre för prestanda, att dra isär alla dokument från en samling med aggregeringsramverket, bara för att bara lista dessa dokument från arrayen.



  1. Ställ in redis nyckel/värde med camel-redis

  2. Frågar du med Redis?

  3. Hur man skapar en Redis-anslutning med Master och Slave

  4. MongoDB-lösenord med @ i