mongodb 分组 得到第一条数据

业务逻辑:

控制器每分钟上报采集数据,现需得到每个控制器的每种采集数据的最近一条数据:

性能比较低。。。

 

/**
     * 分组,得到每个控制器每种采集类型的离当前最近的一条记录
     */
    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);
    	
    }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值