Mengurutkan hasil MongoDB menggunakan Spring Boot dengan MongoTemplate

Aug 16 2020

Hasil

Saya ingin mendapatkan pertanyaan ini:

db.getCollection("employees").find().sort({
  hire_date: 1
}).limit(10)

ditulis dengan MongoTemplate di Spring Boot.

Penelitian

Saya telah melihat banyak posting dan situs tentang penyortiran seperti misalnya

  • https://www.baeldung.com/java-mongodb-aggregations
  • Spring + MongoDB - MongoTemplate + Query Kriteria
  • Penyortiran kueri MongoDB musim semi

Percobaan

Saya sudah mencoba banyak cara tetapi saya masih tidak tahu bagaimana saya bisa melakukan ini. Beberapa hal yang saya coba tercantum di bawah ini:

@Service
public class MongoService {

    @Autowired
    private MongoTemplate mongoTemplate;

    public Document simpleQuery() {

        // 1st
        mongoTemplate.aggregate(Arrays.asList(
                sort(Sorts.ascending("hire_date")),
                limit(10)
        ));

        // 2nd
        mongoTemplate.findAll(Employee.class).sort(new BasicDBObject("hire_date", 1));

        // 3rd
        mongoTemplate.findAll(Employee.class).sort((o1, o2) -> o1.getHire_date() > o2.getHire_date());

        // and more...
    }
}

Solusinya mungkin cukup sederhana, saya kira, seperti kueri itu sendiri, tetapi ini adalah langkah pertama saya di lapangan semacam itu. Terima kasih sebelumnya atas bantuan apa pun yang satu ini.

Jawaban

1 varman Aug 17 2020 at 00:22

Coba ini,

Aggregation aggregation = Aggregation.newAggregation(
    sort(Sort.Direction.ASC, "hire_date"),
    limit(10)
).withOptions(AggregationOptions.builder().allowDiskUse(Boolean.TRUE).build());

mongoTemplate.aggregate(aggregation, mongoTemplate.getCollectionName(Employee.class), Object.class).getMappedResults();
Gibbs Aug 17 2020 at 00:23

Anda dapat melakukan seperti di bawah ini.

  1. Anda membutuhkan bagian kueri
//As you need to match all
Query query = new Query()
  1. Anda perlu menambahkan opsi pengurutan
//You need to use Sort class with sorting order, field name to be used for sorting
query.with(new Sort(Sort.Direction.ASC, "hire_date"));
  1. Anda perlu menambahkan opsi pagination
final Pageable pageableRequest = PageRequest.of(0, 10);
query.with(pageableRequest);
  1. Anda perlu menambahkan model
mongoTemplate(query, Employee.class)

Referensi sampel

Jawaban bermanfaat lainnya