31

假设我收集了以下文件:

{
   "family": "Smith",
   "children": [
        {
            "child_name": "John"
        },
        {
            "child_name": "Anna"
        },
    ]
}

{
   "family": "Williams",
   "children": [
        {
            "child_name": "Anna"
        },
        {
            "child_name": "Kevin"
        },
    ]
}

现在我想以某种方式获得以下所有家庭的唯一孩子姓名列表:

[ "John", "Anna", "Kevin" ]

结果的结构可能不同。如何在 MongoDB 中实现这一点?应该很简单,但我无法弄清楚。我在集合上尝试了 aggregate() 函数,但后来我不知道如何应用 distinct() 函数。

4

2 回答 2

54

你可以这样做:

db.collection.distinct("children.child_name");

在您的情况下,它返回:

[ "John", "Anna", "Kevin" ]
于 2013-04-22T19:59:08.727 回答
6

借助帮助聚合框架:

db.collection.aggregate([{$unwind:'$children'}, {$group:{_id:'$children.child_name'}}])

或更多的兴趣;) 名称的频率:

db.collection.aggregate([{$unwind:'$children'}, {$group:{_id:'$children.child_name', freq:{$sum:1}}}])
于 2013-04-22T19:50:50.930 回答