MongoDB: cuente la cantidad de elementos en una matriz

Tengo una colección donde cada documento de la colección tiene una matriz llamada foo que contiene un conjunto de documentos incrustados. ¿Existe actualmente una forma trivial en el shell MongoDB para contar cuántas instancias hay dentro de foo ? algo como:

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

Cada documento en la matriz debe tener un foo_id único y quiero hacer un conteo rápido para asegurarme de que la cantidad correcta de elementos está dentro de una matriz para un documento aleatorio en la colección.

En MongoDB 2.6, el Framework de Agregación tiene un nuevo operador de array $size que puede usar:

 > 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 está en una versión reciente de mongo (2.2 y posterior) puede usar el marco de agregación.

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

que le dará los foo totales de su colección.

Omitir al último group agregará resultados por registro.

Puedes intentar contar elementos en foos.

  db.collection.aggregate([{$project: {numberOfFoos: { $size: "$foos" } } } ] )