我的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']}
或者其他类似的东西。这个是可能的吗?
4条答案
按热度按时间jhiyze9q1#
您可以使用aggregation框架的
$project
&$unwind
&$group
,让结果更接近您的需求。$unwind
使用了两次,因为名称数组嵌套得很深。只有当neighbor
属性是数组时,它才会起作用。在您的示例中,一个相邻字段(马来西亚)不是数组u4vypkhs2#
用简单得多的方法,也许是最近的事
zvokhttg3#
要扁平化数据,您还可以使用
$reduce
。以下是文档中的一个例子。zyfwsgd64#
在新的aggregation framework下,它相当简单。$PROJECT和$UNWIND操作就是为了达到这个目的。