【问题标题】:Spring change the sorting fields' order for mongodbSpring 更改 mongodb 的排序字段顺序
【发布时间】:2019-07-04 18:49:27
【问题描述】:

我尝试通过 Spring Sort 对象对 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"] }, "availability" : "PRESENT" }, 字段: { }, 排序: { "status" : -1, “_id”:-1 }

实际的mongo查询是:

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

可能是因为_id 是主要字段?

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

谢谢!

【问题讨论】:

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


    【解决方案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 应该有望强制执行您想要的排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-03
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 2016-06-23
      相关资源
      最近更新 更多