Disons que j'ai les documents suivants en collection:
{
"family": "Smith",
"children": [
{
"child_name": "John"
},
{
"child_name": "Anna"
},
]
}
{
"family": "Williams",
"children": [
{
"child_name": "Anna"
},
{
"child_name": "Kevin"
},
]
}
Maintenant, je veux obtenir en quelque sorte la liste suivante de noms d'enfants uniques traversant toutes les familles:
[ "John", "Anna", "Kevin" ]
La structure du résultat peut être différente. Comment y parvenir dans MongoDB? Cela devrait être quelque chose de simple mais je ne peux pas comprendre. J'ai essayé la fonction d'agrégat () sur la collection mais je ne sais pas comment appliquer la fonction distinct ().
Vous pouvez simplement faire:
db.collection.distinct("children.child_name");
Dans votre cas, il renvoie:
[ "John", "Anna", "Kevin" ]
avec le cadre d'agrégation d'aide:
db.collection.aggregate([{$unwind:'$children'}, {$group:{_id:'$children.child_name'}}])
ou plus d'intérêt;) avec la fréquence du nom:
db.collection.aggregate([{$unwind:'$children'}, {$group:{_id:'$children.child_name', freq:{$sum:1}}}])