tutorial por lista ejemplos consultas consulta complejas comandos basicas mongodb mongodb-query flatten

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