MongoDB的聚合查询(两种方式)
来源:互联网 发布:linux mount命令详解 编辑:程序博客网 时间:2024/06/05 02:27
public Map<ObjectId, Long> groupByNative(){
List<ObjectId> questionIdList = distinctByIsRight();
//过滤条件
DBObject queryObject=new BasicDBObject("_id.questionId", new BasicDBObject("$in",questionIdList));
DBObject match=new BasicDBObject("$match",queryObject);
//分组统计
DBObject groupObject=new BasicDBObject("_id",new BasicDBObject("questionId","$questionId"));
groupObject.put("docsNum", new BasicDBObject("$sum",1));
DBObject group=new BasicDBObject("$group",groupObject);
//排序
DBObject sortObject = new BasicDBObject("docsNum", -1);
DBObject sort=new BasicDBObject("$sort",sortObject);
//查询
AggregationOutput output = mirrorAnswerDao.group("MirrorAnswer", group, match, sort);
Map<ObjectId, Long> countMap = new LinkedHashMap<ObjectId, Long>();
for( Iterator< DBObject > it = output.results().iterator(); it.hasNext(); ){
BasicDBObject dbo = ( BasicDBObject ) it.next();
BasicDBObject keyValus = (BasicDBObject)dbo.get("_id");
ObjectId questionId = keyValus.getObjectId("questionId");
long docsNum = ((Integer)dbo.get("docsNum")).longValue();
countMap.put(questionId, docsNum);
}
return countMap;
}
//返回
{
"_id": {
"questionId": {
"$oid": "58f18d650cf29eb80944bac7"
}
},
"docsNum": 79
}
//原生的mongodb查询语句
@SuppressWarnings("deprecation")
public AggregationOutput group(String collectionName, DBObject group, DBObject match, DBObject sort){
AggregationOutput output = finalTemplate.getCollection(collectionName).aggregate(group, match, sort);
return output;
}
//Spring Data MongoDB隆重登场
public Map<ObjectId, Long> groupBySpringDataMongoDB(){
List<ObjectId> questionIdList = distinctByIsRight();
Aggregation agg = Aggregation.newAggregation(
Aggregation.match(Criteria.where("questionId").in(questionIdList)),
Aggregation.group("questionId").count().as("sum"),
Aggregation.sort(Direction.DESC, "sum")
);
List<BasicDBObject> iteratorList = mirrorAnswerDao.aggregate(agg, BasicDBObject.class);
Map<ObjectId, Long> countMap = new LinkedHashMap<ObjectId, Long>();
for (Iterator<BasicDBObject> iterator = iteratorList.iterator(); iterator.hasNext();) {
BasicDBObject obj =iterator.next();
ObjectId questionId = obj.getObjectId("_id");
long sum = obj.getLong("sum");
countMap.put(questionId, sum);
}
return countMap;
}
public <R> List<R> aggregate(Aggregation aggregation, Class<R> aggregationResultClass) {
AggregationResults<R> groupResults = finalTemplate.aggregate(aggregation, entityClass, aggregationResultClass);
List<R> result = groupResults.getMappedResults();
return result;
}
{
"aggregate": "__collection__",
"pipeline": [
{
"$match": {
"questionId": {
"$in": [
{
"$oid": "59dc6ad90cf296ba6ef4d8ca"
},
{
"$oid": "59dc7a530cf28dfe7d216baa"
},
{
"$oid": "58fdce620cf27bc8873d95a0"
},
{
"$oid": "594736a90cf2de6563db59de"
},
{
"$oid": "59c4cc8d0cf2f400b00878f2"
},
{
"$oid": "59cb4c4c0cf2e16fc2fb2c72"
},
{
"$oid": "59ccb7750cf2a8c83743222a"
},
{
"$oid": "59cda1a60cf2a8c837432270"
},
{
"$oid": "59cda5ea0cf2a8c837432278"
},
{
"$oid": "59cdad030cf2a8c83743228b"
},
{
"$oid": "59db0d0f0cf2b5dfabc73417"
},
{
"$oid": "59db841a0cf296ba6ef4d845"
},
{
"$oid": "58f0d9a80cf29eb80944baab"
},
{
"$oid": "58f18d650cf29eb80944bac7"
},
{
"$oid": "58f18fd10cf29eb80944baf1"
},
{
"$oid": "58f5ba930cf21561f2ce97c9"
},
{
"$oid": "58f5d9f90cf21561f2ce9903"
},
{
"$oid": "58f70c630cf257d0acb3bb35"
},
{
"$oid": "58f867dc0cf25030f2717067"
},
{
"$oid": "59dec6160cf28dfe7d216c5e"
},
{
"$oid": "59e022150cf25676e95aac06"
},
{
"$oid": "59e022670cf25676e95aac0f"
},
{
"$oid": "59e029660cf25676e95aac5c"
},
{
"$oid": "59cc8ee00cf29002da4f5e87"
},
{
"$oid": "59e026720cf25676e95aac38"
},
{
"$oid": "59fbc23c0cf258572ba5438d"
}
]
}
}
},
{
"$group": {
"_id": "$questionId",
"sum": {
"$sum": 1
}
}
},
{
"$sort": {
"sum": -1
}
}
]
}
- MongoDB的聚合查询(两种方式)
- MongoDB的使用学习之(七)MongoDB的聚合查询(spring-data-mongodb两种方式)附项目源码
- MongoDB的聚合查询
- mongodb的聚合查询(分组统计、排序)
- 二、MongoDB的高级查询(聚合、游标、管道、索引)
- MongoDB跳出循环的两种方式
- mongodb数据迁移的两种方式
- MongoDB 同步 Hive 的两种方式
- Mongodb中几种聚合查询组合的案例
- mongoDB 学习笔记(二)聚合查询
- MongoDB 高级聚合查询
- mongodb nodeJs聚合查询
- MongoDB 聚合查询
- mongodb mapreduce 聚合查询
- MongoDB聚合查询
- mongodb的几种查询方式
- Mongodb 两种 安装方式
- MyBatis的级联查询(两种方式)
- TCP/IP四层模型
- 返回键
- 为什么析构函数常定义成虚函数
- 浮点数在内存中的存储形式
- 遍历List集合的三种方法
- MongoDB的聚合查询(两种方式)
- java爬虫
- 防止文本框自动获取焦点
- 用户注册
- 第五周 项目3
- 《数据结构与算法-Python语言描述》读书笔记(1)第1章绪论(关键词:数据结构/算法/Python/时间复杂度/空间复杂度)
- JAVA Freemarker(1)--入门示例
- commons双向Map和Bag包
- 最佳的75个安全工具