mongodb 分组 得到第一条数据



mongodb 分组 得到第一条数据方法实例介绍。

业务逻辑:
控制器每分钟上报采集数据,现需得到每个控制器的每种采集数据的最近一条数据:
性能比较低。。。

Java代码 收藏代码
/**
* 分组,得到每个控制器每种采集类型的离当前最近的一条记录
*/
private static void group () {

DBCollection coll = MongoDBUtils.getInstance().getDataColl();

// 按collectType分组
BasicDBObject key = new BasicDBObject(“collectType”, true);

BasicDBObject cond = new BasicDBObject();


cond.put(LedConstants.MONGODB_LONGITUDE, Double.parseDouble(“119.974758″));
cond.put(LedConstants.MONGODB_LATITUDE, Double.parseDouble(“31.687605″));
cond.put(LedConstants.MONGODB_CONTROLLER_CODE, “10″);
cond.put(LedConstants.MONGODB_COLLECT_TYPE, 1);

BasicDBObject initial = new BasicDBObject();
// 给result中的属性赋默认值
initial.append(“newestCollectValue”, 0);
initial.append(“firstTime”, 0);
// js 代码
String reduce = ” function(curr, result) { ”
+ ” if (!result.firstTime) { ”
+ ” result.createDate = curr.createDate; ”
+ ” result.newestCollectValue = curr.collectValue; ”
+ ” result.firstTime = 1; ”
+ ” } ”
+ ” if (curr.createDate > result.createDate) { ”
+ ” result.newestCollectValue = curr.collectValue; ”
+ ” result.createDate = curr.createDate; ”
+ ” } ”
+ ” } “;

String finaly = null;

BasicDBList group = (BasicDBList) coll.group(key, cond, initial, reduce, finaly);

System.out.println(group);

}