【问题标题】:Max / min values with MongoDB documentMongoDB 文档的最大值/最小值
【发布时间】:2013-01-03 18:08:18
【问题描述】:

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

【问题讨论】:

  • 你能得到答案吗?因为我需要完全相同。
  • 嗨。请解释一下,你想做什么,我会尽力帮助你
  • 你在使用存储库吗?
  • 嗨。不记得了,3年后

标签: spring mongodb spring-data nosql


【解决方案1】:

结合使用排序和限制来模拟最小值和最大值:

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

【讨论】:

  • 这是命令行命令,但我使用 Java+ Spring Data。谢谢!
【解决方案2】:

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

Query query = new Query();
query.with(new Sort(Sort.Direction.DESC, "idField"));
query.limit(1);
MyObject maxObject = mongoTemplate.findOne(query, MyObject.class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    相关资源
    最近更新 更多