【问题标题】:MongoDB with Java: Finding the document with max valueMongoDB with Java:查找具有最大值的文档
【发布时间】:2019-05-08 18:23:43
【问题描述】:

我对 MongoDB 和聚合有一个基本的了解。我还没有找到一个明确的例子来说明如何比较多个符合条件的文档并返回 1 个具有特定属性最大值的文档。

假设我们在一个集合中有以下文档:

{ name: "a" , value: 2 }
{ name: "a" , value: 4 }
{ name: "a" , value: 6 }
{ name: "b" , value: 2 }
{ name: "b" , value: 8 }

如何按name (eq("name","a")) 过滤,然后返回value 最高的文档?

【问题讨论】:

  • 也许有答案heredb.collection.find({name: "a"}).sort({value:-1}).limit(1)
  • @BogdanOros 这是我目前的做法,寻找更优雅/更高效的东西。无论如何,谢谢你,应该提到。
  • $max 可以使用一些聚合功能,但是 sort+limit 的方案效率更高。
  • @JonathanWoollett-light 此外,为了使sort().limit() 高效,您还需要在value 字段上建立索引。

标签: java mongodb


【解决方案1】:

试试这个

 db.collection.aggregate(
 [
   {
     $group: {
       _id: "$name",
       values: {$addToSet: "$value"}
     }
   },
   {
     $project:{
     _id: 0, name: "$_id", value: {$max: "$values"}
     }
   }
])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 2015-10-29
    • 2015-02-13
    • 1970-01-01
    相关资源
    最近更新 更多