У меня есть такая коллекция:
{
"_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'
}
]
}
Конечно, я могу просмотреть результаты, чтобы получить результаты в этом формате, но яинтересно, возможно ли это сделать с помощью самого конвейера агрегации.