Запрос mongoDB сортирует по значению массива и использует разбиение на страницы в Springdata MongoDB - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь запросить сортировку коллекции mongoDB по значению массива (в дополнение к другим полям), и результаты также должны быть разбиты на страницы.Сортировка не работает для значения массива, но она работает для других полей.Вот код:

sortBy = "programInstance.title.descriptions[0].value";
PageRequest pageRequest = = PageRequest.of(filter.getPageNumber(), filter.getPageSize(),
                    new Sort("DESC".equalsIgnoreCase(filter.getSortOrder()) ? Sort.Direction.DESC : Sort.Direction.ASC, sortBy));
Page<Offer> st = new PageImpl<>(mongoTemplate.find(query.with(pageRequest),Offer.class), pageRequest, pageCount);

Любая помощь очень ценится.

Ответы [ 2 ]

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

Это успешно сработало с этим выражением.

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

//One or two records from your collection
const data = [{
  name: 'abc',
  place: 'US',
  zone: 'Pacific'
}, {
  name: 'xyz',
  place: 'PK',
  zone: 'Asia'
}, ]
const fields = Object.keys(data[0]);
console.log("Fields in collection: ",fields);
const sortBy = fields[0];
console.log("Sort By: ", sortBy);
//const sort = new Sort("DESC".equalsIgnoreCase(filter.getSortOrder()) ? //Sort.Direction.DESC : Sort.Direction.ASC, sortBy);
//PageRequest pageRequest = = PageRequest.of(filter.getPageNumber(), //filter.getPageSize(), sort);
//Page < Offer > st = new PageImpl < > //(mongoTemplate.find(query.with(pageRequest), Offer.class), pageRequest, //pageCount);

Параметром сортировки является value (тип строки), для которого выполняется сортировка, вы не можете передать строку, которая нуждается в дальнейшей оценке (в вашем случае), чтобы получить значение.Вместо этого непосредственно сохраните свое значение в переменной sortBy и затем передайте sortBy на ваш запрос.

...