difference between aggregate ($match) and find, in MongoDB?

Why does not the aggregate output return as a DBCursor or a List?

The aggregation framework was created to solve easy problems that otherwise would require map-reduce.

This framework is commonly used to compute data that requires the full db as input and few document as output.

What is the difference between the $match operator used inside the aggregate function and the regular find in Mongodb?

One of differences, like you stated, is the return type. Find operations output return as a DBCursor.

Other differences:

  • Aggregation result must be under 16MB. If you are using shards, the full data must be collected in a single point after the first $group or $sort.
  • $match only purpose is to improve aggregation’s power, but it has some other uses, like improve the aggregation performance.

and also why can’t we get a count of the documents that are returned?

You can. Just count the number of elements in the resulting array or add the following command to the end of the pipe:

{$group: {_id: null, count: {$sum: 1}}}

Why doesn’t the find function allow renaming the field names like the aggregate function?

MongoDB is young and features are still coming. Maybe in a future version we’ll be able to do that. Renaming fields is more critical in aggregation than in find.

EDIT (2014/02/26):

MongoDB 2.6 aggregation operations will return a cursor.

EDIT (2014/04/09):

MongoDB 2.6 was released with the predicted aggregation changes.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)