Spring更改mongodb的排序字段的顺序

Spring change the sorting fields' order for mongodb

我尝试通过Spring Sort对象使用2个特定字段对mongo中的数据进行排序。
出于某种原因,Spring会更改"排序字段"的顺序。

我使用Spring和MongoDB数据(MongoTemplate)。我使用findAll()函数获取一些记录。
在mongo数据中,我有特定的索引{"status": -1,"_id": -1 }
我想按此特定索引排序,为此,我添加了以下代码进行排序:

1
2
new Sort(Sort.Direction.DESC,"status").and(new Sort(Sort.Direction.DESC,
"_id"));

我先按status字段排序,然后再按_id字段排序(如索引)。

仅供参考:

我使用其他索引并对它们进行排序,而Spring不会对我的"排序字段"进行排序:

1
2
3
{"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" }, Fields: { }, Sort: {"status" : -1,"_id" : -1 }

实际的mongo查询为:

{"foldersIds" : {"$in" : ["project:5c505594e4b0e98a6537ec9d"] },"availability" :"PRESENT" }, Fields: { }, Sort: {"_id" : -1,"status" : -1 }

也许是因为_id是主字段?

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

谢谢!


我将尝试通过传递List而不是调用and方法来显式设置顺序。像这样的东西:

1
2
3
4
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应该有望强制执行所需的顺序。