假设我收集了以下文件:
{
"family": "Smith",
"children": [
{
"child_name": "John"
},
{
"child_name": "Anna"
},
]
}
{
"family": "Williams",
"children": [
{
"child_name": "Anna"
},
{
"child_name": "Kevin"
},
]
}
现在我想以某种方式获得以下所有家庭中唯一的子名称列表:
[ "John", "Anna", "Kevin" ]
结果的结构可能不同。如何在MongoDB中实现这一目标?应该是简单的事情,但我无法弄清楚。我在集合上尝试了aggregate()函数,但后来我不知道如何应用distinct()函数。
答案 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}}}])