2013-05-26 17 views
0

J'ai des tableaux imbriqués, et j'ai besoin de données de groupe pour chacun des éléments du tableau "foo.foo_id" et calculer le nombre d'occurrences de chacun des éléments (1,2,3 ,. 33,34 ... n).Comment grouper des données par chaque élément de tableau imbriqué

{ 
    "_id": ObjectId("51818aabfa746a8e3e000000"), 
    "foo": { 
    "foo_id": [ 
     31, 
     72, 
     533, 
     23332, 
     233434 
    ] 
    } 
} 

Répondre

0

Ce serait:

db.yourCollection.aggregate({ 
    $unwind: "$foo.foo_id" 
}, {$group: { 
    _id: "$foo.foo_id", 
    count: {$sum: 1} 
}}) 
+0

Cela fonctionne. THX. Environ 22 secondes pour 6 Mo de documents, sur processeur Intel® Core ™ i7-920 Quad-Core, 24 Go de RAM. Bien :) – sasa

+0

De rien. Vous pouvez essayer avec map/reduce, mais je ne sais pas si ce serait plus rapide. –

+0

carte/réduire serait nettement plus lent. peut-être 5x à 10x plus lent. –

Questions connexes