Можно ли сгладить запрос результата MongoDB?
У меня есть глубоко вложенная коллекция в моей коллекции 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']}
Или что-нибудь еще подобное... Возможно ли это?
2 ответа:
Вы можете использовать
$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
является массивом. В вашем примере одно соседнее поле (Малайзия) не является массивом
Это довольно просто в рамках новойагрегационной структуры . Операция $project и $unwind подходят для этой цели.