做网站维护承包合同,低价网站建设推广报价,电商好做吗?,自媒体视频剪辑培训班一、mongo分组查询
mongo中如果只是根据条件查询数据#xff0c;则只需要#xff1a;
db.getCollection(表名).find({source:{$eq:5}})
如果根据字段进行分组查询#xff0c;那么需要用aggregate传一个数组进行查询#xff0c;如
db.getCollection(表名).find({ …一、mongo分组查询
mongo中如果只是根据条件查询数据则只需要
db.getCollection(表名).find({source:{$eq:5}})
如果根据字段进行分组查询那么需要用aggregate传一个数组进行查询如
db.getCollection(表名).find({ $and : [{ startTime : { $gt : new Date(1702296000837) } }, { startTime : { $lt : new Date(1702382400838) } }, { source : { $eq : 5 } }] })
在Java代码中怎么实现分组查询呢
我们需要使用BasicDBObject构建四个对象分别是match(查询条件)、project(展示字段)、group(分组信息获取)、sort(根据什么字段排序)才能实现分组查询
1、查询条件构造 match
{ $match : { $and : [{ startTime : { $gte : { $date : 1676721600504 } } }, { startTime : { $lte : { $date : 1702641600504 } } }] } }
代码实现
BasicDBObject st new BasicDBObject($gte, new Date()); BasicDBObject et new BasicDBObject($lte, new Date()); BasicDBObject startTime new BasicDBObject(createDate,st); BasicDBObject endTime new BasicDBObject(createDate,et); //相当于 createDate时间1 and createDate 时间2
BasicDBList list new BasicDBList(); list.add(startTime); list.add(endTime); //如果有其他的条件再继续添加 2、构建分组以及分组的内容
{ $group : { _id : $agentId, list : { $push : { sId : $sId, title : $title, status : $status} } } }
这相当于用agentId字段进行分组然后在list字段插入分组的每一条明细信息如果要把整条明细字段都保留插入到list集合中那需要将红色字段修改从$$ROOT (需要mongo版本支持) 代码实现
BasicDBObject group new BasicDBObject(); groupFields.put(_id, $ccodAgentId); BasicDBObject show new BasicDBObject(); show.put(custId,$custId); show.put(status,$status); group.put(list, new BasicDBObject($push, show)); 3、构建查询筛选展示字段 project
BasicDBObject project new BasicDBObject(_id, 1); project.put(list, 1);
注意 这相当于从mongo表中查询筛选最后保留下来哪些字段这里最后展示的是_id、list两列
要注意project在aggregate数组中的位置如果这里project放在group的前面那么就查不出其他字段了 代码实现
BasicDBObject project new BasicDBObject(_id, 1); project.put(list, 1); 4、构建排序
{ $sort : { _id : 1 } }
根据_id字段进行排序1是正序-1是反序 代码实现
BasicDBObject sortBy new BasicDBObject();
sortBy.put(startTime, 1); 最后查询
ListDBObject pipeline new ArrayListDBObject(); pipeline.add(match);
pipeline.add(group); pipeline.add(fields); pipeline.add(sort);
//指定聚合的输出格式为CURSOR
AggregationOptions build AggregationOptions.builder().outputMode(AggregationOptions.OutputMode.CURSOR).build();
IteratorDBObject it mongoTemplate.getCollection(collectionName).aggregate(pipeline,build);