2017-09-24 68 views
0

我有一篇文章存在一个数组字段 - 主题例如如何平坦嵌套数组addToSet

"topics":['topic 1','topic 2'] 

现在我想通过作者群,并得到作者的帖子的所有话题,我以前addToSet实现它

{$group: {"_id":"$screen_name",post_count:{$sum:1}, "topics":{$addToSet:"$topics"} } } 

,结果是这样的

"topics" : [ [ "topic 1","topic 2" ], [ "topic 3" ], [ "topic 4" ] ] 

我想知道怎么会让它回到输出以下

"topics" : ["topic 1" ,"topic 2" , "topic 3","topic 4" ] 

即是第一个输出。

+0

你的mongod版本是什么? – styvane

+0

版本为3.2 – zhuguowei

回答

0

一种方法是放松两次重组:

[ 
{$group: {"_id":"$screen_name",post_count:{$sum:1}, "topics":{$addToSet:"$topics"} } }, 
{$unwind: "$topics"}, 
{$unwind: "$topics"}, 
{$group : { 
    _id : "$_id", 
    post_count : {$first: "$post_count"}, 
    topics : {$addToSet : "$topics"} 
    }} 
] 

开卷返回不同的文档,以供数组中的每个元素,所以展开两次将允许您扁平化阵列的整个阵列。

+0

最后一组中的一些繁琐和总计post_count导致错误的post_count,例如,作者A只有一个帖子,但主题:[t1,t2,t3]以你的方式post_count将是3 – zhuguowei

+0

你是对的,我编辑了我的答案;) –