业务逻辑:
控制器每分钟上报采集数据,现需得到每个控制器的每种采集数据的最近一条数据:
性能比较低。。。
/**
* 分组,得到每个控制器每种采集类型的离当前最近的一条记录
*/
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);
}