2016-12-28 5 views
2

Ich habe eine Sammlung:Wie kann ich verschachtelte Dokumente zusammenfassen?

{ 
    _id : xxx, 
    children : [ 
     { 
      childrenOfChildren : [ 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       } 
      ] 
     }, 
     { 
      childrenOfChildren : [ 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       } 
      ] 
     }, 
     { 
      childrenOfChildren : [ 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       } 
      ] 
     } 
    ] 
}, 

{ 
    _id : xxx, 
    children : [ 
     { 
      childrenOfChildren : [ 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       } 
      ] 
     }, 
     { 
      childrenOfChildren : [ 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       } 
      ] 
     }, 
     { 
      childrenOfChildren : [ 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       } 
      ] 
     } 
    ] 
}, 

{ 
    _id : xxx, 
    children : [ 
     { 
      childrenOfChildren : [ 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       } 
      ] 
     }, 
     { 
      childrenOfChildren : [ 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       } 
      ] 
     }, 
     { 
      childrenOfChildren : [ 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       } 
      ] 
     } 
    ] 
}, 

{ 
    _id : xxx, 
    children : [ 
     { 
      childrenOfChildren : [ 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       } 
      ] 
     }, 
     { 
      childrenOfChildren : [ 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       } 
      ] 
     }, 
     { 
      childrenOfChildren : [ 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       }, 
       { 
        price : xxx 
       } 
      ] 
     } 
    ] 
} 

Jeder Eintrag hat eine Reihe Kinder genannt. Und jeder Eintrag in Kindern hat ein Array mit dem Namen childrenOfChildren. Und jeder Eintrag in childrenOfChildren hat ein Attribut mit dem Namen Preis. Ich möchte den maximalen Preis in dieser Gesamtsammlung erhalten. Wie kann ich das erreichen? Bitte hilf mir!

+0

kann versuchen, mit 'aggregate' Abfrage –

+0

Mögliches Duplikat [? Wie kann ich max Wert in verschachtelten Dokumenten erhalten] (http://stackoverflow.com/questions/41327672/how-can-i-get-max-value-in-verschachtelte Dokumente) – styvane

Antwort

2

Sie diese mit $ entspannen und $ Gruppe tun können.

db.collection.aggregate([ 
    { 
     $unwind:"$children" 
    }, 
    { 
     $unwind:"$children.childrenOfChildren" 
    }, 
    { 
     $group:{ 
     _id:null, 
     maxPrice:{ 
      $max:"$children.childrenOfChildren.price" 
     } 
     } 
    } 
]) 

Ausgang:

{ "_id" : null, "maxPrice" : 110 } 
1

können Sie den Höchstpreis aus der gesamten Sammlung mit aggregate Abfrage mit $unwind und $group erhalten.

können versuchen, diese Anfrage:

db.getCollection('collectionName').aggregate([ 
{$unwind: "$children"}, 
{$unwind: "$children.childrenOfChildren"}, 
{$group:{_id: null, price:{$max: "$children.childrenOfChildren.price"}}} 
]) 
Verwandte Themen