MongoDB: count the number of items in an array
In MongoDB 2.6, the Aggregation Framework has a new array $size
operator you can use:
> 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 }
if you are on a recent version of mongo (2.2 and later) you can use the aggregation framework.
db.mycollection.aggregate([ {$unwind: '$foo'}, {$group: {_id: '$_id', 'sum': { $sum: 1}}}, {$group: {_id: null, total_sum: {'$sum': '$sum'}}}])
which will give you the total foo
s of your collection.
Omitting the last group
will aggregate results per record.
Using Projections and Groups
db.mycollection.aggregate( [ { $project: { _id:0, foo_count:{$size:"$foo"}, } }, { $group: { foo_total:{$sum:"$foo_count"}, } } ])
Multiple child array counts can also be calculated this way
db.mycollection.aggregate( [ { $project: { _id:0, foo1_count:{$size:"$foo1"}, foo2_count:{$size:"$foo2"}, } }, { $group: { foo1_total:{$sum:"$foo1_count"}, foo2_total:{$sum:"$foo2_count"}, } } ])