我有一个这样的收藏集:
{
"_id" : ObjectId("5b73d0eb71283a04c45737b3"),
"rating" : 5,
"category" : "Camera",
"topic" : "wifi",
"version" : 1.0,
"date" : ISODate("2018-07-11T17:30:00.000-06:30"),
"jobId" : ObjectId("5b73d089ec6bf63b6df38484"),
"snippet" : "very good product",
"sku" : "B0749MNH84",
"cleanedUp" : true
}
我想基于给定的SKU和主题数组进行汇总。我尝试相同的方法:
db.reviews.aggregate(
[
{ $match: { sku: { $in: skus } } },
{ $match: { topic: { $in: topics } } },
{
$group: {
_id: {
topic: '$topic', sku : "$sku"
},
snippets: {'$addToSet': {snippet: "$snippet"}}
}
},
{
$project : {
_id : false, sku: "$_id.sku", snippets : "$snippets", topic : "$_id.topic"
}
}
]
);
对于sku B0749MNH84
和主题['quality', 'price']
,结果为:
{
sku : 'B0749MNH84',
snippets: [Array],
topic : 'quality'
},
{
sku : 'B0749MNH84',
snippets: [Array],
topic : 'price'
}
如果可能的话,我实际上想做的是使用聚合管道本身以这种格式(按SKU分组)获得结果:
{
sku : 'B0749MNH84',
topics:
[
{
snippets: [Array],
topic : 'quality'
},
{
snippets: [Array],
topic : 'price'
}
]
},
{
sku : 'some other SKU',
topics:
[
{
snippets: [Array],
topic : 'topic1'
},
{
snippets: [Array],
topic : 'topic2'
}
]
}
当然,我可以遍历结果以这种格式获取结果,但是我想知道是否可以使用聚合管道本身来实现。