根据时间倒序查询:因为mongo中的_id包含有时间信息,_id倒序就是时间顺序,即可简单时间倒序查询。也可以根据某一时间字段来查询,如下:
命令:
db.getCollection('data_collect').find({}).sort({_id: -1}).limit(5)
db.getCollection('data_collect').find({}).sort({uploadTime: -1}).limit(5)
java: 倒序分页查询
MongoCollection<Document> readCollect = mongoTemplate.getCollection(collectionName);
JSONArray jsonArray=new JSONArray();
Block<Document> processBlock = new Block<Document>() {
@Override
public void apply(final Document document) {
jsonArray.add(JSON.parse(document.toJson()));
}
};
// 倒序查询:可根据mongoId来
// Bson sort= Filters.eq("_id",-1);
Bson sort = Filters.eq("uploadTime",-1);
log.info("jsonSql: " + jsonSql);
readCollect.find(Document.parse(jsonSql)).sort(sort).skip(skip).limit(limit).forEach(processBlock);
return new ResponseEntity<>(jsonArray, HttpStatus.OK);
}
根据模糊条件查询总条数:
聚合函数:查询IMEI中包含8659,并且userSetkey 为02的记录总条数
db.getCollection('data_collect').aggregate([
{ $match: { $and: [ { IMEI: {$regex:/8695/} }, {userSetkey :"02" } ] }}
,{ $group: { _id: null, count: { $sum: 1 } } }
])
java:
// 不包含模糊查询的
// MongoCollection<Document> readCollect = mongoTemplate.getCollection("data_collect");
// Bson filter = Filters.eq("reportMethod","autoReport");
// Bson filter1 = Filters.eq("IMEI",IMEI);
// Bson filter2 = Filters.eq("userSetkey",userSetkey);
// Bson and = Filters.and(filter);
// if ("".equals(IMEI) && !"".equals(userSetkey)){
// and = Filters.and(filter, filter2);
// }
// if ("".equals(userSetkey) && !"".equals(IMEI)){
// and = Filters.and(filter, filter1);
// }
// if("".equals(IMEI) && "".equals(userSetkey)){
// and = Filters.and(filter);
// }
// if(!"".equals(IMEI) & !"".equals(userSetkey)){
// and = Filters.and(filter, filter1, filter2);
// }
// log.info("and: " + and);
// long count = readCollect.countDocuments(and);
// return new ResponseEntity<>(count, HttpStatus.OK);
// 包含模糊查询的:用正则表达式可以不需要进行非空判断
Query query = new Query(Criteria.where("userSetkey").regex(userSetkey).and("IMEI").regex(IMEI));
log.info("query: " + query);
long count = mongoTemplate.count(query, "data_collect");
return new ResponseEntity<>(count, HttpStatus.OK);