一,问题描述
数据格式: id, timeStamp,count
条件1:查询 某个时间段 内的数据: timeStamp BETWEEN startTime AND endTime。比如 timeStamp BETWEEN 1499875200 AND 1499875600
条件2:记录 的 id 字段 属于某集合: id IN (1001,1002,1003)
条件3:记录 的count字段 大于某个阈值,比如: count > 10000
二,代码实现
条件1实现如下, $gte (greater equal)表示“大于等于 ”。【$lte(lower equal)】表示“小于等于”
private DBObject timeCondi(long startTimeStamp, long endTimeStamp){ DBObject queryCondition = new BasicDBObject("$gte", startTimeStamp).append("$lte", endTimeStamp); BasicDBObject query = new BasicDBObject("timeStamp", queryCondition); return query; }
条件2的实现如下,使用 $in ArrayList<Integer> 来表示 id IN (1001,1002,1003)
private DBObject inCondi() { List<Integer> idList = new ArrayList<Integer>(); idList.add(1001); idList.add(1002); idList.add(1003); BasicDBObject inQuery = new BasicDBObject(); inQuery.put("id", new BasicDBObject("$in", idList)); return inQuery; }
组合条件1 和 条件2 查询:(条件1 AND 条件2).List 将所有 AND 组合的条件add进去,然后使用 $and 组合。
private DBObject andQuery(long startTimeStamp, long endTimeStamp) { DBObject timeCondi = timeCondi(startTimeStamp, endTimeStamp); DBObject inCondi = inCondi(); List<DBObject> andCondi = new ArrayList<DBObject>(); andCondi.add(timeCondi);//组合 条件1 andCondi.add(inCondi);//组合 条件2