Springデータ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”) }
または
....//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データ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);
参考文献
ソート()]。リンク://mongodb/spring-data-mongodb-query-document/[SpringデータMongoDB
: Query Document]