我有一个mongodb集合,如:
db.kids.find()
//results
[
{name:'tom', age:10},
{name:'alice', age:12},
....
]
Run Code Online (Sandbox Code Playgroud)
我需要一个查询来从这个集合中获取MAX'age',就像在SQL中一样: SELECT MAX(age) FROM kids WHERE 1
Hos*_*ian 100
db.collection.find().sort({age:-1}).limit(1) // for MAX
db.collection.find().sort({age:+1}).limit(1) // for MIN
Run Code Online (Sandbox Code Playgroud)
它完全可用,但我不确定性能
小智 59
建议答案的表现很好.根据MongoDB文档:
当$ sort紧接在$ limit之前时,优化器可以将$ limit合并到$ sort中.这允许排序操作仅在进展时保持前n个结果,其中n是指定的限制,而MongoDB只需要在内存中存储n个项目.
所以在这种情况下
db.collection.find().sort({age:-1}).limit(1)
Run Code Online (Sandbox Code Playgroud)
由于上述优化,我们只得到最高元素而没有对集合进行排序.
小智 14
如何使用聚合框架:
db.collection.aggregate({ $group : { _id: null, max: { $max : "$age" }}});
Run Code Online (Sandbox Code Playgroud)
小智 14
您可以使用组和最大值:
db.getCollection('kids').aggregate([
{
$group: {
_id: null,
maxQuantity: {$max: "$age"}
}
}
])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
91556 次 |
最近记录: |