我的 MongoDB 集合中有一个深度嵌套的集合。
当我运行以下查询时:
db.countries.findOne({},{'data.country.neighbor.name':1,'_id':0})
我在这里得到这个嵌套结果:
{"data" : {
"country" : [
{
"neighbor" : [
{
"name" : "Austria"
},
{
"name" : "Switzerland"
}
]
},
{
"neighbor" : {
"name" : "Malaysia"
}
},
{
"neighbor" : [
{
"name" : "Costa Rica"
},
{
"name" : "Colombia"
}
]
}
]
}}
现在,这就是我想要的:
['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']
或者这个:
{'name':['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']}
或其他类似的东西......这可能吗?
最佳答案
你可以使用aggregation的$project
& $unwind
& $group
框架以使结果更接近您的要求。
> db.countries.aggregate({$project:{a:'$data.country.neighbor.name'}},
{$unwind:'$a'},
{$unwind:'$a'},
{$group:{_id:'a',res:{$addToSet:'$a'}}})
{
"result" : [
{
"_id" : "a",
"res" : [
"Colombia",
"Malaysia",
"Switzerland",
"Costa Rica",
"Austria"
]
}
],
"ok" : 1
}
$unwind
使用了两次,因为名称数组嵌套得很深。只有当 neighbor
属性是一个数组时,它才会起作用。在您的示例中,一个相邻字段(马来西亚)不是数组
https://stackoverflow.com/questions/13281733/