春天更改mongodb的排序字段的顺序

时间:2019-02-11 09:52:04

标签: spring mongodb sorting mongodb-query spring-data-mongodb

我尝试通过Spring Sort对象(包含2个特定字段)对mongo中的数据进行排序。 出于某种原因,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”]},“ availability”:“ PRESENT”},字段:{},排序:{“ status”:-1, “ _id”:-1}

实际的mongo查询为:

  

{“ foldersIds”:{“ $ in”:[“ project:5c505594e4b0e98a6537ec9d”]},“ availability”:“ PRESENT”},字段:{},排序:{“ _id”:-1, “状态”:-1}

也许是因为_id是主要字段吗?

我想保留排序字段的顺序。知道如何保存订单吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我将尝试通过传递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可以强制执行所需的顺序。