使用java 操作mongodb的aggregate
来源:互联网 发布:利用网络漏洞日赚上万 编辑:程序博客网 时间:2024/05/03 03:22
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实现
-
- 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);
-
-
- 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);
-
- DBObject groupFields = new BasicDBObject( "_id", "$lastEvent");
- groupFields.put("count", new BasicDBObject( "$sum", 1));
- DBObject group = new BasicDBObject("$group", groupFields);
-
- DBObject sort = new BasicDBObject("$sort", new BasicDBObject("_id", 1));
-
- 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