Spring изменить порядок полей сортировки для mongodb - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь отсортировать данные в монго по объекту Spring Sort с двумя конкретными полями.Почему-то Spring меняет порядок «полей сортировки».

Я использую данные Spring и MongoDB (MongoTemplate).Я использую findAll() функцию для получения некоторых записей.В данных монго у меня есть определенный индекс { "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 сохраняетПорядок сортировки полей в запросе Монго:

Запрос: {...}, Sort: { "status":-1, "__sort_authors":1 }

Запрос: {...}, Sort: { "status":-1, "__sort_title":1 }

Ожидаемый запрос монго должен быть:

{"folderIds": {"$ in": ["project: 6s5d4f32sd1f65"]}, "Availability": "PRESENT"}, Поля: {}, Сортировка: {"status ": -1," _id ": -1}

Фактический запрос монго:

{" folderIds ": {"$ in": ["project: 5c505594e4b0e98a6537ec9d"]}, "Availability": "PRESENT"}, Поля: {}, Сортировка: {"_id": -1, "status": -1}

Может, потому что _id является основным полем?

Я хочу сохранить порядокполя сортировки.Есть идеи как сохранить заказ?

Спасибо!

1 Ответ

0 голосов
/ 11 февраля 2019

Я бы попытался явно установить порядок, передав 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 должно обеспечить порядок, который вы хотите.

...