MongoDB语句
db.tsdata.aggregate([
{$match: { "lastUpdateTime" :{"$gte": ISODate("2016-07-22T16:00:00.000Z"),"$lte": ISODate("2016-07-23T16:00:00.000Z")}}},
{$group: {_id: {"lastEvent": "$lastEvent"}, "count": {$sum: 1}}},
{$sort: {_id: 1}},
{$limit: 100}
])
Java实现
//当前日期前3天
Calendar oneDayStart = Calendar.getInstance();
oneDayStart.setTime(new Date());
oneDayStart.add(Calendar.DAY_OF_MONTH, -3);
oneDayStart.set(Calendar.HOUR_OF_DAY, 0);
oneDayStart.set(Calendar.MINUTE, 0);
oneDayStart.set(Calendar.SECOND, 0);
oneDayStart.set(Calendar.MILLISECOND,0);
Calendar oneDayEnd = Calendar.getInstance() ;
oneDayEnd.setTime(new Date());
oneDayEnd.add(Calendar.DAY_OF_MONTH, -3);
oneDayEnd.set(Calendar.HOUR_OF_DAY, 23);
oneDayEnd.set(Calendar.MINUTE, 59);
oneDayEnd.set(Calendar.SECOND, 59);
oneDayEnd.set(Calendar.MILLISECOND,999);
//match
BasicDBObject[] array = {
new BasicDBObject("lastUpdateTime", new BasicDBObject("$gte",oneDayStart.getTime())),
new BasicDBObject("lastUpdateTime", new BasicDBObject("$lte",oneDayEnd.getTime())) };
BasicDBObject cond = new BasicDBObject();
cond.put("$and", array);
DBObject match = new BasicDBObject("$match", cond);
//group
DBObject groupFields = new BasicDBObject( "_id", "$lastEvent");
groupFields.put("count", new BasicDBObject( "$sum", 1));
DBObject group = new BasicDBObject("$group", groupFields);
//sort
DBObject sort = new BasicDBObject("$sort", new BasicDBObject("_id", 1));
//limit
DBObject limit = new BasicDBObject("$limit", 5);
AggregationOutput output = mongoTemplate.getCollection("tsdata").aggregate(match,group,sort,limit);
Iterable<DBObject> list= output.results();
for(DBObject dbObject:list){
System.out.println(dbObject.get("_id") +" "+dbObject.get("count"));
}
输出结果
Start spring container!
no use
Spring container started!
ActionCodeChange 98826
Book 20639
Cancel 69446
CheckIn 291753
Downgrade 13