MongoDB:如何获得不同的子文档字段值列表?

时间:2013-04-22 19:35:20

标签: mongodb distinct nosql

假设我收集了以下文件:

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

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

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

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

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

2 个答案:

答案 0 :(得分:51)

你可以这样做:

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

在你的情况下,它返回:

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

答案 1 :(得分:6)

使用帮助聚合框架:

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

或更多兴趣;)频率为:

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