Aggregation operations in MongoDB allow you to process documents to produce computed results. An example is to search for a min or max value. For documents that look like this:
{
"_id" : ObjectId("5521ae8c0364d302910ec5eb"),
"color" : "blue",
"orderDate" : ISODate("2014-07-08T19:53:00Z")
//other properties
}
You can find the min/earliest date in the collection for an document with matching color of blue with an aggregation query like this:
db.collectionName.aggregate(
[
{ "$match" : { "color":"blue" } },
{ "$group" : { "_id" : "$color",
first: { "$min" : "$orderDate"},
}
])
Implementing this with the Java Driver API looks like this:
DBObject match = new BasicDBObject("$match", new BasicDBObject("color", "blue"));
//$group
DBObject groupFields = new BasicDBObject( "_id", "$color");
groupFields.put("orderDate", new BasicDBObject( "$min", "$orderDate"));
DBObject group = new BasicDBObject("$group", groupFields);
List<DBObject> pipeline = Arrays.asList(match, group);
AggregationOutput output = col.aggregate(pipeline);
for (DBObject result : output.results()) {
//iterate results, only 1 for $min
}