我尝试通过SpringSort对象对mongo中的数据进行排序,其中包含两个特定的字段。出于某种原因,Spring更改了“排序字段”的顺序。
我使用Spring和MongoDB data (MongoTemplate)。我使用findAll()函数获取一些记录。在mongo数据中,我有特定的索引{ "status": -1, "_id": -1 }。我想按照这个特定的索引进行排序,并为此添加了用于排序的代码:
new Sort(Sort.Direction.DESC, "status").and(new Sort(Sort.Direction.DESC,
"_id"));我按status字段进行排序,然后按_id字段进行排序(如索引)。
FYI:
我使用其他索引并根据它们进行排序,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”:“项目:6s5d4f32sd1f65”},“可用性”:“当前”},字段:{ },排序:{“状态”:-1,"_id“:-1 }
实际的mongo查询是:
{ "foldersIds“:{ "$in”:“项目:5c505594e4b0e98a6537ec9d”},“可用性”:“当前”},字段:{ },排序:{ "_id“:-1,”状态“:-1 }
也许是因为_id是主字段吗?
我想要保持排序字段的顺序。知道怎么保存秩序吗?
谢谢!
发布于 2019-02-11 19:50:01
我将通过传递一个List来显式地设置顺序,而不是调用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()方法的文档只指定它合并了指定的排序,而没有指定如何或按什么顺序组合它们。希望使用List可以强制执行所需的顺序。
https://stackoverflow.com/questions/54627796
复制相似问题