我有一个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管道相关推荐

  1. java collections.sort 忽略大小写排序_Java Spring Mongo排序忽略大小写问题

    我正在使用Spring-Data-mongodb对MongoDB执行各种请求. 尝试执行分页&时用忽略的情况排序我得到一个例外, 这是我的代码: Sort.Order order = new ...

  2. SAP UI5 初学者教程之二十三 - 列表控件的排序 Sort 和分组 Group 试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...

  3. JAVA面试汇总第四章 Spring及数据库相关

    Spring 核心功能演示 + 面试题 Spring Framework 简称 Spring,是 Java 开发中最常用的框架,地位仅次于 Java API,就连近几年比较流行的微服务框架 Sprin ...

  4. 【Java学习路线之JavaWeb】Spring Cloud教程(非常详细)

    文章目录 读者 阅读条件 微服务是什么 微服务,我们可以从字面上去理解,即"微小的服务",下面我们从"服务"和"微小"两个方面进行介绍. 微 ...

  5. Java开发面试题含答案(计算机网络、操作系统、Java、Mysql、Redis、Spring)

    Java开发一轮复习 一.网络篇 1.OSI七层模型与TCP/IP 五层模型 ​ OSI七层:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层 ​ TCP/IP五层:物理层.数据链路层.网络 ...

  6. Java 异常java.lang.IllegalArgumentException: Illegal group reference

    Java 异常java.lang.IllegalArgumentException: Illegal group reference 参考文章: (1)Java 异常java.lang.Illegal ...

  7. effective java英文版pdf_Java之Spring1:Spring简介、环境搭建、源码下载及导入MyEclipse...

    框架学习前言 这个模块是面向Spring的,Spring的学习我是这么想的: 1.简单介绍Spring,主要是从网上借鉴一些重点 2.尽量说明清楚Spring的使用方法以及细节点 3.尽量以自己的理解 ...

  8. java jpa注解哪个包好,Spring Data JPA 中常用注解详解

    一.java对象与数据库字段转化 @Entity:标识实体类是JPA实体,告诉JPA在程序运行时生成实体类对应表 @Table:设置实体类在数据库所对应的表名 @Id:标识类里所在变量为主键 @Gen ...

  9. spring boot框架学习学前掌握之重要注解(2)-通过java的配置方式进行配置spring

    本节主要内容: 1:通过代码演示实现零XML配置spring 2:使用重点注解理解 声明: 本文是<凯哥陪你学系列-框架学习之spring boot框架学习>中spring boot框架学 ...

  10. Java DO到DTO转换利用spring 的BeanUtils.copyProperties

    Java DO到DTO转换利用spring 的BeanUtils.copyProperties() public static <T> List<T> copy(Object ...

最新文章

  1. JS根据两点的经纬度坐标得到驾车行驶距离
  2. ASP.NET Core 2 学习笔记(七)路由
  3. C++类的Const数组的初始化
  4. 3143 二叉树的序遍历
  5. jquery插件 --- 图表 表格
  6. MySql学习之varchar类型
  7. 限流算法(漏桶算法、令牌桶算法)对比
  8. android单选按钮空值,Android的 - 空指针异常的对话与单选按钮
  9. java反射 获取变量值_Java反射:如何获取变量的名称?
  10. [Project Euler] 来做欧拉项目练习题吧: 题目005
  11. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_12-页面静态化-页面静态化流程...
  12. 计算机考研复试问题回答,关于考研复试问题的官方解答及部分问题答题模板!...
  13. Delphi7--循环结构语句
  14. win7用html做桌面,win7系统怎么制作主题桌面 win7系统制作主题桌面方法
  15. 超赞!设计师完全自学指南
  16. 电脑测网速c语言,C层实现多线程测网速
  17. Android学习笔记--Notification(通知)
  18. python毕业设计总结范文大全_java毕业设计总结报告(精选范文3篇)
  19. 逆向教程-U3D游戏逆向分析(伊甸逆向分析)
  20. java替换一个反斜杠_java反斜杠替换

热门文章

  1. IT行业的6大热门岗位,薪酬都有多高?
  2. python爬虫实训总结报告_python爬虫简单总结(一)
  3. dede后台系统基本参数空白怎么办
  4. WAMP 建立配置自己的网站
  5. 绍兴印象二 从三味书屋到百草园
  6. matlab读取文件xlsfinfo,Matlab读写excel文件函数
  7. 如果你现在没有目标,或许很迷茫
  8. API平台都有的Appid、Appkey、Appsecret分别是什么意思?
  9. 将PDF电子书转换成EPUB格式
  10. background 与 background-image