I have a collection where every document in the collection has an array named foo
that contains a set of embedded documents. Is there currently a trivial way in the MongoDB shell to count how many instances are within foo
? something like:
db.mycollection.foos.count()
or db.mycollection.foos.size()
?
Each document in the array needs to have a unique foo_id
and I want to do a quick count to make sure that the right amount of elements are inside of an array for a random document in the collection.
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.