0

Ich möchte die Ergebnisse von und aggregate, $ Gruppe und $ push bestellen und begrenzen.

Sagen wir, dass ich ein System mit Online-Bestellungen habe. Und ich möchte jedes Jahr eine Liste mit 3 bestbestellten Produkten erhalten, sortiert nach Jahr und Produktmenge.

[ 
    { 
     year: 2016, 
     products: [ 
      { 
       product: 'product D', 
       amount: 1000 
      }, 
      { 
       product: 'product C', 
       amount: 300 
      }, 
      { 
       product: 'product B', 
       amount: 200 
      } 
     ] 
    }, 
    { 
     year: 2015, 
     products: [ 
      { 
       product: 'product G', 
       amount: 800 
      }, 
      { 
       product: 'product B', 
       amount: 400 
      }, 
      { 
       product: 'product A', 
       amount: 300 
      } 
     ] 
    }, 
    ... 
] 

In Mungo kann ich Daten nach Jahr:

year product  amount 

2016 product A 100 
2016 product B 200 
2016 product C 300 
2016 product D 1000 
2016 product E 50 

2015 product F 100 
2015 product G 800 
2015 product A 300 
2015 product B 400 
2015 product C 100 

2014 product A 70 
2014 product B 50 
2014 product G 500 
2014 product C 600 
2014 product D 900 

Das zurückgegebene Objekt sollte so etwas wie dieses

Orders.model 
    .aggregate([ 
     { 
      $group: { 
       _id: { 
        'year': '$year', 
       }, 
       products: { 
        $push: { 
         product: '$product', 
         amount: '$amount' 
        } 
       } 
      } 
     }, 

     { 
      $project: { 
       _id: 0, 
       year: '$_id.year', 
       products: '$products' 
      } 
     } 
    ]) 

Es gibt mir alle Produktnamen und die Mengen und nicht sortiert.

Von Ich weiß nicht, wie gruppierte Daten zu sortieren und zu begrenzen. Ich versuchte $ sort, $ limit, $ ohne Erfolg.

Antwort

0

Sortieren Sie Ihre Daten vor dem Gruppieren. Dann können Sie am Ende $slice verwenden, um die oberen drei Elemente zu erhalten:

[ 
     { 
      $sort: { 
       year:-1, 
       amount:-1 
      } 
     }, 
     { 
      $group: { 
       _id: { 
        'year': '$year', 
       }, 
       products: { 
        $push: { 
         product: '$product', 
         amount: '$amount' 
        } 
       } 
      } 
     }, 
     { 
      $project: { 
       _id: 0, 
       year: '$_id.year', 
       product: {$slice: [ "$products", 3 ]} 
      } 
     } 
] 
Verwandte Themen