MongoDB: count the number of items in an array

2019-01-01 05:46发布

问题:

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.

回答1:

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 }


回答2:

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 foos of your collection.

Omitting the last group will aggregate results per record.