MongoDB: Comment obtenir une liste distincte de valeurs de champs de sous-documents?

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 d'une façon ou d'une autre la liste suivante de noms d'enfants uniques traversent toutes les familles:

[ "John", "Anna", "Kevin" ]

la Structure du résultat peut être différente. Comment y parvenir en MongoDB? Ça devrait être quelque chose de simple, mais je n'arrive pas à le comprendre. J'ai essayé la fonction aggregate() sur la collecte, mais je ne sais pas comment appliquer la fonction distincte ().

25
demandé sur Community 2013-04-22 23:35:20
la source

2 ответов

Tu peux faire:

db.collection.distinct("children.child_name");

Dans votre cas, il retourne:

[ "John", "Anna", "Kevin" ]
49
répondu Asya Kamsky 2013-04-22 23:59:08
la source

avec l'aide de l'agrégation cadre:

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}}}])
6
répondu Vladimir Muzhilov 2013-04-22 23:50:50
la source

Autres questions sur