MongoDB汇总$ group和$ project与组结果

时间:2018-11-28 11:09:56

标签: mongodb mongodb-query aggregation-framework

我有一个这样的收藏集:

{
    "_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'
           }
         ]
}

当然,我可以遍历结果以这种格式获取结果,但是我想知道是否可以使用聚合管道本身来实现。

0 个答案:

没有答案
相关问题