web-dev-qa-db-fra.com

MongoDB: compter le nombre d'éléments dans un tableau

J'ai une collection où chaque document de la collection a un tableau nommé foo qui contient un ensemble de documents incorporés. Existe-t-il actuellement un moyen trivial dans le shell MongoDB pour compter le nombre d'instances dans foo? quelque chose comme:

db.mycollection.foos.count() ou db.mycollection.foos.size()?

Chaque document du tableau doit avoir un foo_id et je veux faire un décompte rapide pour m'assurer que la bonne quantité d'éléments se trouve à l'intérieur d'un tableau pour un document aléatoire dans la collection.

24
randombits

Dans MongoDB 2.6, le cadre d'agrégation a un nouveau tableau $size opérateur que vous pouvez utiliser:

> db.mycollection.insert({'foo':[1,2,3,4]})
> db.mycollection.insert({'foo':[5,6,7]})

> db.mycollection.aggregate({$project: { count: { $size:"$foo" }}})
{ "_id" : ObjectId("5314b5c360477752b449eedf"), "count" : 4 }
{ "_id" : ObjectId("5314b5c860477752b449eee0"), "count" : 3 }
48
Stennie

si vous utilisez une version récente de mongo (2.2 et versions ultérieures), vous pouvez utiliser le cadre d'agrégation.

db.mycollection.aggregate([
  {$unwind: '$foo'},
  {$group: {_id: '$_id', 'sum': { $sum: 1}}},
  {$group: {_id: null, total_sum: {'$sum': '$sum'}}}
])

qui vous donnera le total foos de votre collection.

L'omission du dernier group agrégera les résultats par enregistrement.

22
xlembouras