我的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']}
或其他类似的东西......这可能吗?
答案 0 :(得分:50)
您可以使用$project
& $unwind
& aggregation框架$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
属性是数组时才有效。在您的示例中,一个邻居字段(马来西亚)不是数组
答案 1 :(得分:1)
做起来简单得多,也许是最近的
plugins: [
'~plugins/vue-awesome',
],
build: {
transpile: [/vue-awesome/]
},
答案 2 :(得分:-5)
在新的aggregation framework下,它非常简单。 $ project和$ unwind操作是正确的。