2017-10-15 46 views
0

我有一个集合“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

你'$ group'阶段是无效的。同时考虑向我们展示预期的结果。 – styvane

+1

尝试'{ “$组”:{ “_id”: “$标签”, “计数”:{ “$总和”: “$ CPT”} }}' – Veeram

+0

@sstyvane我编辑了'$ group'阶段。 – PPaFeu

回答

1

的问题是,你的聚集管道与$项目只选择标签到下一个阶段的开始,这就是为什么你在文件执行$组没有CPT。这是我的工作例如:

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

])

+0

谢谢。我会试试这个。我在mongodb上真的很新,而且我还没有真正理解'$ project',所以我觉得这很有意思。 – PPaFeu