Spring Data MongoDB: получить последние измененные записи (сортировка по дате)
В Mongodb вы можете использовать sort () для сортировки по дате.
1. Примеры сортировки MongoDB
В Mongodb, чтобы отсортировать поле «дата», выдает:
//The '1' = sort ascending (oldest to newest) db.domain.find().sort({lastModifiedDate:1}) { "_id" : 1, "lastModifiedDate" : ISODate("2013-08-13T07:18:04.774Z") } { "_id" : 2, "lastModifiedDate" : ISODate("2013-09-03T08:12:16.309Z") } { "_id" : 3, "lastModifiedDate" : ISODate("2013-10-03T08:12:16.309Z") } { "_id" : 4, "lastModifiedDate" : ISODate("2013-11-03T08:12:16.326Z") } { "_id" : 5, "lastModifiedDate" : ISODate("2013-12-03T08:12:16.345Z") }
or
//The '-1' = sort descending (newest to oldest) db.domain.find().sort({lastModifiedDate:-1}) { "_id" : 5, "lastModifiedDate" : ISODate("2013-12-03T08:12:16.345Z") } { "_id" : 4, "lastModifiedDate" : ISODate("2013-11-03T08:12:16.326Z") } { "_id" : 3, "lastModifiedDate" : ISODate("2013-10-03T08:12:16.309Z") } { "_id" : 2, "lastModifiedDate" : ISODate("2013-09-03T08:12:16.309Z") } { "_id" : 1, "lastModifiedDate" : ISODate("2013-08-13T07:18:04.774Z") }
Если поле «lastModifiedDate» не проиндексировано и возвращает слишком много данных, сортировка завершится неудачно и поднимется ниже сообщения об ошибке
db.domain.find().sort({lastModifiedDate:-1}) Sat Oct 12 11:51:43.055 JavaScript execution failed: SyntaxError: Unexpected token : > db.domain.find({},{domainName:1}).sort({lastModifiedDate:1}); error: { "$err" : "too much data for sort() with no index. add an index or specify a smaller limit" "code" : 10128 }
Чтобы исправить это, всегда добавляйтеlimit()
вместе сsort()
.
db.domain.find().sort({lastModifiedDate:-1}).limit(10)
2. Spring Data MongoDB: примеры сортировки
В данных Spring используйте это:
import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; //... Query query = new Query(); query.limit(10); query.with(new Sort(Sort.Direction.DESC, "lastModifiedDate")); mongoOperation.find(query, Domain.class);