Spring Data を使用して MongoDB データベースにアクセスしています。MongoTemplate クラスを使用して、フィールドの 1 つに最大値を持つドキュメントを取得するにはどうすればよいですか。ありがとう!
2 に答える
並べ替えと制限の組み合わせを使用して、最小値と最大値をエミュレートします。
db.test.insert({a: 1})
db.test.insert({a: 2})
db.test.insert({a: 3})
db.test.find().sort({a: 1 } }).limit(1)
db.test.find().sort({a: -1}).limit(1)
sort({a: 1}) は a フィールドの昇順 (最小順) ソートです。 、そして最初のドキュメントのみを返します。これがそのフィールドの最小値になります。
sort({a: -1}) は a フィールドの降順 (最大順) ソートであり、最初のドキュメントのみを返します。これがそのフィールドの最大値になります。
りんくうの答えは正解ですが、春ではありません。これは spring-data-mongodb で行うことができます。並べ替えフィールド (または @Id フィールド) がインデックス化されている場合、Mongo は並べ替え/制限の組み合わせを最適化します。それ以外の場合は、top-k アルゴリズムを使用し、グローバルな並べ替え ( mongodb sort doc)を回避するため、まだかなり優れています。これはMkyong の例からのものですが、最初に並べ替えを行い、制限を 1 秒に設定します。
Query query = new Query();
query.with(new Sort(Sort.Direction.DESC, "idField"));
query.limit(1);
MyObject maxObject = mongoTemplate.findOne(query, MyObject.class);