spring - Spring 更改 mongodb 的排序字段顺序
问题描述
我尝试通过 SpringSort
对象对 mongo 中的数据进行排序,其中包含 2 个特定字段。出于某种原因,Spring 改变了“排序字段”的顺序。
我使用 Spring 和 MongoDB 数据 ( MongoTemplate
)。我使用findAll()
函数来获取一些记录。在 mongo 数据中,我有特定的索引{ "status": -1, "_id": -1 }
。我想按此特定索引进行排序,为此我添加了以下代码进行排序:
new Sort(Sort.Direction.DESC, "status").and(new Sort(Sort.Direction.DESC,
"_id"));
我按status
字段排序,然后按_id
字段(如索引)排序。
供参考:
我使用其他索引并按它们排序,而 Spring 不会对我的“排序字段”进行排序:
{ "status": -1, "__sort_authors": 1 }
{ "status": -1, "__sort_title": 1 }
在这些情况下,Spring 将排序字段的顺序保存在 Mongo 查询中:
询问:{...}, Sort: { "status":-1, "__sort_authors":1 }
询问:{...}, Sort: { "status":-1, "__sort_title":1 }
预期的 mongo 查询应该是:
{“foldersIds”:{“$in”:[“project:6s5d4f32sd1f65”]},“可用性”:“PRESENT”},字段:{},排序:{“status”:-1,“_id”:-1 }
实际的 mongo 查询是:
{“foldersIds”:{“$in”:[“project:5c505594e4b0e98a6537ec9d”]},“可用性”:“PRESENT”},字段:{},排序:{“_id”:-1,“状态”:-1 }
也许是因为它_id
是主要领域?
我想保持排序字段的顺序。知道如何保存订单吗?
谢谢!
解决方案
我会尝试通过传递 aList
而不是调用and
方法来显式设置顺序。像这样的东西:
ArrayList<Order> orders = new ArrayList<>();
orders.add(new Sort.Order(Sort.Direction.DESC, "status"));
orders.add(new Sort.Order(Sort.Direction.DESC, "_id"));
Sort sort = Sort.by(orders);
我建议这样做的原因是因为该Sort.and()
方法的文档仅指定它组合指定的排序,它没有指定它如何或以什么顺序组合它们。使用 aList
应该有望强制执行您想要的排序。
推荐阅读
- typescript - TypeScript 属性装饰器,接受装饰属性类型的参数
- flying-saucer - 使用 OpenPDF 库在 FlyingSaucer 上将 XHTML 渲染为 PDF 速度很慢
- python - 如何使用 Twitter API 从电子邮件地址中查找帐户?
- html - 以角度创建递归动态扩展导航的正确方法是什么,以及如何正确切换其菜单项?
- spring-boot - Axios 身份验证请求无法将标头发送到 Spring Boot
- javascript - 如果为真,则 jquery 对话框发布
- c# - 收到错误消息“类型“XmlNode”在未引用的程序集中定义。”,但引用了适当的程序集
- c - Makefile 编译所有 src 并生成静态库
- r - 条形图的频率作为独立列表
- bash - 将进程替换与此处的字符串相结合