MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Est-il possible d'aplatir la requête de résultat MongoDB ?

Vous pouvez utiliser $project &$unwind &$group de agrégation framework pour obtenir un résultat plus proche de vos besoins.

> 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 utilisé deux fois car le tableau de noms est profondément imbriqué. Et cela ne fonctionnera que si le neighbor L'attribut est un tableau. Dans votre exemple, un champ voisin (Malaisie) n'est pas un tableau