por - ¿Es posible aplanar la consulta de resultados de MongoDB?
mongodb ejemplos (2)
Tengo una colección profundamente anidada en mi colección MongoDB.
Cuando ejecuto la siguiente consulta:
db.countries.findOne({},{''data.country.neighbor.name'':1,''_id'':0})
Termino con este resultado anidado aquí:
{"data" : {
"country" : [
{
"neighbor" : [
{
"name" : "Austria"
},
{
"name" : "Switzerland"
}
]
},
{
"neighbor" : {
"name" : "Malaysia"
}
},
{
"neighbor" : [
{
"name" : "Costa Rica"
},
{
"name" : "Colombia"
}
]
}
]
}}
Ahora, esto es lo que quiero:
[''Austria'', ''Switzerland'', ''Malaysia'', ''Costa Rica'', ''Colombia'']
o esto:
{''name'':[''Austria'', ''Switzerland'', ''Malaysia'', ''Costa Rica'', ''Colombia'']}
o algo similar ... ¿Es esto posible?
Es bastante sencillo en el nuevo marco de agregación . Las operaciones $ project y $ unwind son correctas para este propósito.
Puede usar $project
& $unwind
& $group
de agregación framework para obtener el resultado más cercano a su requerimiento.
> 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
usado dos veces desde que el conjunto de nombres está anidado en profundidad. Y solo funcionará si el atributo neighbor
es una matriz. En su ejemplo, un campo vecino (Malasia) no es una matriz