$group と $push の結果を並べ替えて制限したいと思います。
オンライン注文のシステムがあるとしましょう。そして、毎年最も注文の多い 3 つの製品を年と製品の量で並べ替えたリストを取得したいと考えています。
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
返されるオブジェクトは次のようになります。
[
{
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
}
]
},
...
]
マングースでは、年ごとにデータをグループ化できます。
Orders.model
.aggregate([
{
$group: {
_id: {
'year': '$year',
},
products: {
$push: {
product: '$product',
amount: '$amount'
}
}
}
},
{
$project: {
_id: 0,
year: '$_id.year',
products: '$products'
}
}
])
それは私にすべての製品名と金額を教えてくれますが、ソートされていません.
グループ化されたデータを並べ替えて制限する方法がわかりません。$sort、$limit、$each を試しましたが成功しませんでした。