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.
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 }
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 foo
s de votre collection.
L'omission du dernier group
agrégera les résultats par enregistrement.