#java #mongodb #quarkus #quarkus-panache
Вопрос:
Я пытаюсь отсортировать документ MongoDB по дате создания в порядке убывания. Я использую щегольство, а также подкачку.
Я смог правильно отсортировать данные на каждой отдельной странице, так как сортирую данные после того, как я извлек их из коллекции. Однако данные на первой странице являются самыми старыми, в то время как данные на последней странице являются самыми новыми. У кого-нибудь есть представление о том, как подходить к сортировке при подкачке. Я использую quarkus и Java
Вот как я это делаю в настоящее время
PanacheQuery<BasicInfo> basicInfoPanacheQuery;
// is used to sort by createdDate
Comparator<BasicInfo> byDateCreated = (c1, c2) -> {
if (c1.getCreatedDate().isAfter(c2.getCreatedDate())) return -1;
else return 1;
};
Bson searchBson = Filters.and(Filters.eq("entity", 2));
Document bsonDocument = bsonToDocument(searchBson.toBsonDocument(BsonDocument.class,
MongoClientSettings.getDefaultCodecRegistry()));
basicInfoPanacheQuery = BasicInfo.find(bsonDocument).page(Page.of(page, PAGE_SIZE));
basicInfoPanacheQuery
.stream()
.sorted(byDateCreated)
.forEach(
x -> {
// manipulate the data
}
);
Ответ №1:
Здесь вы запрашиваете коллекцию по страницам, а затем сортируете каждую страницу. Таким образом, результаты будут отправлены в порядке вставки коллекции, а затем отсортированы постранично.
Что вам нужно сделать, так это отсортировать запрос с помощью сортировки MongoDB, так как вы используете Document
запрос на основе строк, а не на основе строк, вы можете добавить сортировку в запрос документа или использовать возможность сортировки с помощью панели: https://quarkus.io/guides/mongodb-panache#sorting