怎么可能压扁addToSet的嵌套数组

时间:2017-09-24 08:34:09

标签: mongodb

我有一个post doc存在一个数组字段 - 例如主题

"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" ]

这是第一个输出。

1 个答案:

答案 0 :(得分: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"}
    }}
]

Unwind为数组中的每个元素返回一个不同的文档,因此展开两次将允许您展平整个数组数组。