以下は私のmongodb構造です:
[{
_id: '111',
items: [{
productId: '123'
}]
}, {
_id: '222',
items: [{
productId: '123'
}, {
productId: '456'
}]
}, {
_id: '333',
items: [{
productId: '123'
}, {
productId: '456'
}, {
productId: '789'
}]
}]
そして、productId
をグループ化してカウントすると、結果は次のようになります。
[{
productId: '123',
count: 3
}, {
productId: '456',
count: 2
}, {
productId: '789',
count: 1
}]
まあ、私はaggregation
を次のように使ってみましたが、私はそれが間違っていると思います:
const aggregatorOpts = [{
$group: {
_id: "$items.productId",
count: { $sum: 1 }
}
}]
Model.aggregate(aggregatorOpts).exec()
私は得ました:
result [
{ _id: [ '123' ], count: 1 },
{ _id: [ '123', '456' ], count: 1 },
{ _id: [ '123', '456', '789' ], count: 1 }
]
集約の方法に関するヘルプはおそらくありがたく、モデルの変更を想定しないでください。
前もって感謝します!
必要がある - $unwind
グループ化前の項目配列:
const aggregatorOpts = [{
$unwind: "$items"
},
{
$group: {
_id: "$items.productId",
count: { $sum: 1 }
}
}
]
Model.aggregate(aggregatorOpts).exec()
それは与える:
{ "_id" : "789", "count" : 1 }
{ "_id" : "456", "count" : 2 }
{ "_id" : "123", "count" : 3 }
これを試してみてください。
Model.aggregate([
{
$group: {
_id: '$items.productId',
points: {$count: '$items'}
}
}
]);
これは動作するはずです。