通过另一个数组属性的值对属性进行组合

时间:2017-10-15 19:40:10

标签: mongodb mongodb-query aggregation-framework

我有一个集合" tagsCount"看起来像那样:

{ 
    "_id" : ObjectId("59e3a46a48507851d411ad78"),
    "tags" : [ "Marketing" ],
    "cpt" : 14354 
},
{ 
    "_id" : ObjectId("59e3a46a48507851d411ad79"), 
    "tags" : [ 
        "chatbot", 
        "Content marketing", 
        "Intelligence artificielle",
        "Marketing digital",
        "Personnalisation"
    ], 
    "cpt" : 9037 
}

当然还有更多的线路。

我想得到" cpt"按"标记"。

的值分组

我想出了:

db.tagsCount.aggregate([
    { "$project": { "tags":1 }}, 
    { "$unwind": "$tags"},
    { "$group": { 
        "_id" : "$tags", 
        cpt : "$cpt" ,
        "count": { "$sum": "$cpt" }
    }}
])

但是这并不能解决问题,我有所有不同标签的列表,而且计数的值为0.

有可能做我想做的事吗?

1 个答案:

答案 0 :(得分:1)

问题是您的汇总管道以 $ project 开头,它只选择下一阶段的标签,这就是您执行 $ group 没有cpt的文件。这是我的工作范例:

db.tagsCount.aggregate([
   { "$unwind": "$tags"},
   { "$group": { 
       "_id": "$tags",
       "count": { "$sum": "$cpt" }
   }},
   { "$project": { "tag": "$_id", "_id": 0, "count": 1 }}

])