我有一个集合" 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.
有可能做我想做的事吗?
答案 0 :(得分:1)
问题是您的汇总管道以 $ project 开头,它只选择下一阶段的标签,这就是您执行 $ group 没有cpt的文件。这是我的工作范例:
db.tagsCount.aggregate([
{ "$unwind": "$tags"},
{ "$group": {
"_id": "$tags",
"count": { "$sum": "$cpt" }
}},
{ "$project": { "tag": "$_id", "_id": 0, "count": 1 }}
])