一,问题描述
数据格式: 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, longendTimeStamp){
DBObject queryCondition= new BasicDBObject("$gte", startTimeStamp).append("$lte", endTimeStamp);
BasicDBObject query= new BasicDBObject("timeStamp", queryCondition);returnquery;
}
条件2的实现如下,使用 $in ArrayList 来表示 id IN (1001,1002,1003)
privateDBObject inCondi() {
List idList = new ArrayList();
idList.add(1001);
idList.add(1002);
idList.add(1003);
BasicDBObject inQuery= newBasicDBObject();
inQuery.put("id", new BasicDBObject("$in", idList));returninQuery;
}
组合条件1 和 条件2 查询:(条件1 AND 条件2).List 将所有 AND 组合的条件add进去,然后使用 $and 组合。
private DBObject andQuery(long startTimeStamp, longendTimeStamp) {
DBObject timeCondi=timeCondi(startTimeStamp, endTimeStamp);
DBObject inCondi=inCondi();
List andCondi = new ArrayList();
andCondi.add(timeCondi);//组合 条件1
andCondi.add(inCondi);//组合 条件2