MongoDB sonuçlarını MongoTemplate ile Spring Boot kullanarak sıralama
Aug 16 2020
Amaç
Bu sorguyu almak istiyorum:
db.getCollection("employees").find().sort({
hire_date: 1
}).limit(10)
Spring Boot'ta MongoTemplate ile yazılmıştır.
Araştırma
Örneğin, sıralama ile ilgili birçok gönderi ve site gördüm.
- https://www.baeldung.com/java-mongodb-aggregations
- Spring + MongoDB - MongoTemplate + Criteria Sorgusu
- Bahar MongoDB sorgu sıralaması
Denemeler
Pek çok yol denedim ama bunu nasıl yaptırabileceğimi hala çözemiyorum. Denediğim şeylerden bazıları aşağıda listelenmiştir:
@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...
}
}
Çözüm sanırım oldukça basit olabilir, tıpkı sorgunun kendisi gibi, ancak bunlar benim bu tür bir zeminde ilk adımlarım. Bu konuda herhangi bir yardım için şimdiden teşekkür ederim.
Yanıtlar
1 varman Aug 17 2020 at 00:22
Bunu dene,
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
Aşağıdaki gibi yapabilirsiniz.
- Sorgu kısmına ihtiyacınız var
//As you need to match all
Query query = new Query()
- Sıralama seçeneği eklemeniz gerekiyor
//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"));
- Sayfalandırma seçeneği eklemeniz gerekiyor
final Pageable pageableRequest = PageRequest.of(0, 10);
query.with(pageableRequest);
- Bir model eklemeniz gerekiyor
mongoTemplate(query, Employee.class)
Örnek başvuru
Başka bir faydalı cevap
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'