len - MongoDB: cuenta el número de elementos en una matriz
mongodb len of array (2)
Tengo una colección donde cada documento de la colección tiene una matriz llamada foo
que contiene un conjunto de documentos incrustados. ¿Hay 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 de 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 marco de agregación tiene un nuevo operador de $size
matriz 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''}}}
])
Lo que te dará el total de tu colección.
La omisión del último group
agregará los resultados por registro.