【发布时间】: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 最高的文档?
【问题讨论】:
-
也许有答案here。
db.collection.find({name: "a"}).sort({value:-1}).limit(1) -
@BogdanOros 这是我目前的做法,寻找更优雅/更高效的东西。无论如何,谢谢你,应该提到。
-
$max可以使用一些聚合功能,但是 sort+limit 的方案效率更高。 -
@JonathanWoollett-light 此外,为了使
sort().limit()高效,您还需要在value字段上建立索引。