您的位置:首页 > 数据库 > Mongodb

java mongodb aggregate用法

2016-07-26 14:16 302 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java mongodb