Сортировка документа MongoDB с помощью Panache и Quarkus

#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