sql >> Database >  >> NoSQL >> MongoDB

Alleen de geneste documenten van een array uit alle documenten retourneren

U kunt dit doen met .aggregate() en voornamelijk de $unwind pijpleidingbeheerder:

In moderne MongoDB 3.4 en hoger kun je gebruiken in combinatie met $replaceRoot

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

})

In eerdere versies specificeert u alle velden met $project :

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

})

Dus $unwind is wat u gebruikt om de array-ingangen voor verwerking te deconstrueren of "denormaliseren". Dit creëert in feite een kopie van het hele document voor elk lid van de array.

De rest van de taak gaat over het retourneren van "alleen" die velden die aanwezig zijn in de array.

Het is echter niet erg verstandig om te doen. Als het uw bedoeling is om alleen inhoud te retourneren die is ingesloten in een array van een document, dan kunt u die inhoud beter in een aparte verzameling plaatsen.

Het is veel beter voor de prestaties, door alle documenten uit een verzameling met het aggregatieraamwerk uit elkaar te halen, alleen om die documenten alleen uit de array op te sommen.



  1. Hoe Hadoop werkt - Begrijp de werking van Hadoop

  2. MongoDB:tel het aantal items in een array

  3. 3 manieren om een ​​string om te zetten naar een datum in MongoDB

  4. node redis, variabelen worden gedeeld tussen clients?