Mar*_*ace 39 flatten mongodb mongodb-query
我在MongoDB集合中有一个深层嵌套的集合.
当我运行以下查询时:
db.countries.findOne({},{'data.country.neighbor.name':1,'_id':0})
Run Code Online (Sandbox Code Playgroud)
我最终得到了这个嵌套的结果:
{"data" : {
"country" : [
{
"neighbor" : [
{
"name" : "Austria"
},
{
"name" : "Switzerland"
}
]
},
{
"neighbor" : {
"name" : "Malaysia"
}
},
{
"neighbor" : [
{
"name" : "Costa Rica"
},
{
"name" : "Colombia"
}
]
}
]
}}
Run Code Online (Sandbox Code Playgroud)
现在,这就是我想要的:
['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']
Run Code Online (Sandbox Code Playgroud)
或这个:
{'name':['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']}
Run Code Online (Sandbox Code Playgroud)
或其他类似的东西......这可能吗?
Ram*_*Vel 58
您可以使用$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
}
Run Code Online (Sandbox Code Playgroud)
$unwind由于名称数组嵌套深,因此使用了两次.它只有在neighbor属性是数组时才有效.在您的示例中,一个邻居字段(马来西亚)不是数组
小智 11
以更简单的方式完成,也许是最近的
db.countries.aggregate({$unwind:'$data.country.neighbor.name'})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30047 次 |
| 最近记录: |