MongoDB: count the number of items in an array

mongodb, mongoid

Solution

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 }

Problem

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.

Original source