java sort 没法用,$ group无法使用Spring聚合类后的$ sort管道
我有一个User集合,如下所示:
User :{
"_id" : ObjectId("59f6dc660a975a3e3290ea01"),
"basicInfo" : {
"name" : "xxxx",
"age" : 27,
"gender" : "Male"
}
"otherInfo" {
"projects" : [
{
"_id" : ObjectId("59f6f9230a975a67cc7d7638"),
"name" : "Test Project",
"projectImage" : "images/project/59f6f9230a975a67cc7d7638.jpg",
"desc" : "This is a testing project",
"status" : "Active",
"verifyDet" : {
"method" : "Admin",
"status" : "PENDING",
"isVerified" : false
}
},
{
"_id" : ObjectId("59f6f9230a975a67cc7d5556"),
"name" : "Test Project Two",
"projectImage" : "images/project/59f6f9230a975a67cc7d5556.jpg",
"desc" : "This is a testing project",
"status" : "Closed",
"verifyDet" : {
"method" : "Admin",
"status" : "APPROVED",
"isVerified" : true
}
}
]
}
}
注意:一个用户可以成为多个项目的一部分 . 但他需要得到Admin的批准才能参与项目活动 . 验证由verifyDet管理,项目由projects数组管理 .
实际要求是以这样的方式显示成员列表:具有待验证的成员按字母顺序排在最前面,然后按字母顺序向管理员批准/验证成员 .
当我在mongo shell上运行以下查询时,我得到的用户列表只有一个项目详细信息(_id = 59f6f9230a975a67cc7d7638),我想要搜索并按验证待定用户和用户名排序结果 . 结果恰如其分 .
db.User.aggregate(
{$unwind:"$otherInfo.projects"},
{
$match:{
"otherInfo.projects._id":ObjectId("59f6f9230a975a67cc7d7638"),
"otherInfo.projects.status":"Active"
}
},
{$group: {_id: {"_id":"$_id", "basicInfo":"$basicInfo"}, "projects": {$push: "$otherInfo.projects"}}},
{$project:{"_id":"$_id._id", "basicInfo":"$_id.basicInfo", "otherInfo.projects":"$projects"}},
{$sort:{"otherInfo.projects.verifyDet.isVerified":1, "basicInfo.name":1}}
)
但是当我在Spring中创建相同的聚合时,如下所述,我得到例外:
public List fetchUsersList(String projectId, Pageable pageable) {
//unwind operation
AggregationOperation unwindOp = Aggregation.unwind("$otherInfo.projects");
Criteria criteria = Criteria.where("otherInfo.projects._id").is(new ObjectId(projectId));
criteria.and("otherInfo.projects.status").is("Active");
AggregationOperation matchOp = Aggregation.match(criteria);
AggregationOperation groupOp = Aggregation.group(
Fields.from(Fields.field("_id", "$_id")).and(Fields.field("basicInfo","$basicInfo"))).push("$otherInfo.projects").as("projects");
AggregationOperation projectOp = Aggregation.project(
Fields.from(Fields.field("_id","$_id._id"),
Fields.field("basicInfo","$_id.basicInfo"),
Fields.field("otherInfo.projects","$projects")));
AggregationOperation sortOp = Aggregation.sort(Direction.DESC, "otherInfo.projects.verifyDet.isVerified").and(Direction.DESC, "basicInfo.name");
Aggregation agg = Aggregation.newAggregation(unwindOp, matchOp, groupOp, projectOp, sortOp);
AggregationResults results = mongoTemplate.aggregate(agg,
"User", User.class);
return results.getMappedResults();
}
例外:
2017-12-15 19:24:31,852 ERROR GlobalExceptionHandler:75 - Exception Stack Trace :
java.lang.IllegalArgumentException: Invalid reference 'otherInfo.projects.verifyDet.isVerified'!
at org.springframework.data.mongodb.core.aggregation.ExposedFieldsAggregationOperationContext.getReference(ExposedFieldsAggregationOperationContext.java:99)
at org.springframework.data.mongodb.core.aggregation.ExposedFieldsAggregationOperationContext.getReference(ExposedFieldsAggregationOperationContext.java:80)
at org.springframework.data.mongodb.core.aggregation.SortOperation.toDBObject(SortOperation.java:73)
at org.springframework.data.mongodb.core.aggregation.AggregationOperationRenderer.toDBObject(AggregationOperationRenderer.java:56)
at org.springframework.data.mongodb.core.aggregation.Aggregation.toDbObject(Aggregation.java:580)
at org.springframework.data.mongodb.core.aggregation.Aggregation.toString(Aggregation.java:596)
at com.grpbk.gp.repository.impl.UserRepositoryCustomImpl.fetchUsersList(UserRepositoryCustomImpl.java:1128)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
请让我知道我做错了什么 .
java sort 没法用,$ group无法使用Spring聚合类后的$ sort管道相关推荐
- java collections.sort 忽略大小写排序_Java Spring Mongo排序忽略大小写问题
我正在使用Spring-Data-mongodb对MongoDB执行各种请求. 尝试执行分页&时用忽略的情况排序我得到一个例外, 这是我的代码: Sort.Order order = new ...
- SAP UI5 初学者教程之二十三 - 列表控件的排序 Sort 和分组 Group 试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...
- JAVA面试汇总第四章 Spring及数据库相关
Spring 核心功能演示 + 面试题 Spring Framework 简称 Spring,是 Java 开发中最常用的框架,地位仅次于 Java API,就连近几年比较流行的微服务框架 Sprin ...
- 【Java学习路线之JavaWeb】Spring Cloud教程(非常详细)
文章目录 读者 阅读条件 微服务是什么 微服务,我们可以从字面上去理解,即"微小的服务",下面我们从"服务"和"微小"两个方面进行介绍. 微 ...
- Java开发面试题含答案(计算机网络、操作系统、Java、Mysql、Redis、Spring)
Java开发一轮复习 一.网络篇 1.OSI七层模型与TCP/IP 五层模型 OSI七层:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层 TCP/IP五层:物理层.数据链路层.网络 ...
- Java 异常java.lang.IllegalArgumentException: Illegal group reference
Java 异常java.lang.IllegalArgumentException: Illegal group reference 参考文章: (1)Java 异常java.lang.Illegal ...
- effective java英文版pdf_Java之Spring1:Spring简介、环境搭建、源码下载及导入MyEclipse...
框架学习前言 这个模块是面向Spring的,Spring的学习我是这么想的: 1.简单介绍Spring,主要是从网上借鉴一些重点 2.尽量说明清楚Spring的使用方法以及细节点 3.尽量以自己的理解 ...
- java jpa注解哪个包好,Spring Data JPA 中常用注解详解
一.java对象与数据库字段转化 @Entity:标识实体类是JPA实体,告诉JPA在程序运行时生成实体类对应表 @Table:设置实体类在数据库所对应的表名 @Id:标识类里所在变量为主键 @Gen ...
- spring boot框架学习学前掌握之重要注解(2)-通过java的配置方式进行配置spring
本节主要内容: 1:通过代码演示实现零XML配置spring 2:使用重点注解理解 声明: 本文是<凯哥陪你学系列-框架学习之spring boot框架学习>中spring boot框架学 ...
- Java DO到DTO转换利用spring 的BeanUtils.copyProperties
Java DO到DTO转换利用spring 的BeanUtils.copyProperties() public static <T> List<T> copy(Object ...
最新文章
- JS根据两点的经纬度坐标得到驾车行驶距离
- ASP.NET Core 2 学习笔记(七)路由
- C++类的Const数组的初始化
- 3143 二叉树的序遍历
- jquery插件 --- 图表 表格
- MySql学习之varchar类型
- 限流算法(漏桶算法、令牌桶算法)对比
- android单选按钮空值,Android的 - 空指针异常的对话与单选按钮
- java反射 获取变量值_Java反射:如何获取变量的名称?
- [Project Euler] 来做欧拉项目练习题吧: 题目005
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_12-页面静态化-页面静态化流程...
- 计算机考研复试问题回答,关于考研复试问题的官方解答及部分问题答题模板!...
- Delphi7--循环结构语句
- win7用html做桌面,win7系统怎么制作主题桌面 win7系统制作主题桌面方法
- 超赞!设计师完全自学指南
- 电脑测网速c语言,C层实现多线程测网速
- Android学习笔记--Notification(通知)
- python毕业设计总结范文大全_java毕业设计总结报告(精选范文3篇)
- 逆向教程-U3D游戏逆向分析(伊甸逆向分析)
- java替换一个反斜杠_java反斜杠替换