1

我正在使用 Spring Data 访问 MongoDB 数据库。如何使用 MongoTemplate 类在其中一个字段中检索最大具有最大值的文档。谢谢!

4

2 回答 2

1

使用 sort 和 limit 的组合来模拟 min 和 max:

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 字段的降序(最大值优先)排序,然后只返回第一个文档,这将是该字段的最大值。

于 2013-01-20T15:26:30.263 回答
1

Rinku 的回答是正确的,但不是 Spring。您可以在 spring-data-mongodb 中执行此操作。如果排序字段被索引(或@Id 字段),Mongo 将优化排序/限制组合。否则它仍然很好,因为它将使用 top-k 算法并避免全局排序(mongodb sort doc)。这是来自Mkyong 的示例,但我先进行排序并将限制设置为一秒。

Query query = new Query();
query.with(new Sort(Sort.Direction.DESC, "idField"));
query.limit(1);
MyObject maxObject = mongoTemplate.findOne(query, MyObject.class);
于 2016-10-11T17:08:49.167 回答