参考 > 参考 > 经营者 > 查询修饰符 > 最高$
在本页面
$max
从v3.2开始不推荐使用
从v3.2开始,shell中$max不推荐使用该运算符 mongo。在mongo外壳中,cursor.max()改用。
mongo
cursor.max()
指定一个$max值以指定特定索引的排他上限,以约束的结果 find()。所述$max指定的上限为所有的特定索引的键,以便。
find()
所述mongo外壳提供了max() 包装方法:
max()
db.collection.find( { <query> } ).max( { field1: <max value>, ... fieldN: <max valueN> } )
您还$max可以使用以下两种形式之一进行指定:
db.collection.find( { <query> } )._addSpecial( "$max", { field1: <max value1>, ... fieldN: <max valueN> } ) db.collection.find( { $query: { <query> }, $max: { field1: <max value1>, ... fieldN: <max valueN> } } )
索引用途
从MongoDB 4.2开始,必须使用hint()运行方法 max()/ 明确指定特定的索引,但$max以下情况除外:您不需要find()在_id字段上提示 查询是否为相等条件。{ _id: <value> }
hint()
_id
{ _id: <value> }
因为max()在字段上需要一个索引,并强制查询使用该索引,所以如果可能,您可能更喜欢$lt查询的 运算符。考虑以下示例:
$lt
db.collection.find( { _id: { $in: [ 6, 7 ] } } ).max( { age: 25 } ).hint( { age: 1 } )
该查询使用age字段上的索引,即使索引_id可能更好。
age
如果使用$maxwith $min指定范围:
$min
中指定的索引范围,$min并且$max 必须都引用同一索引的键。
指定的范围$max必须大于指定的范围$min。
在版本4.0中更改。
在min与max运营商表明,该系统应避免在正常的查询计划。相反,他们构建一个索引扫描,其中指标界限明确给出的数值规定 min和max。
min
max
警告
如果未指定两个边界之一,则查询计划将是一侧无边界的索引扫描。与不包含任何运算符或使用两个运算符来更严格地限制索引扫描的查询相比,这可能会降低性能。
以下示例使用mongo外壳程序包装器。
考虑对collection具有索引的名为的集合进行以下操作 :{ age: 1 }
collection
{ age: 1 }
db.collection.find( { <query> } ).max( { age: 100 } ).hint( { age: 1 } )
此操作将查询限制为字段age小于的那些文档,100并强制执行查询计划,该计划将索引从MinKey扫描 到100。{ age: 1 }
100
$max单独使用或与结合使用$min,可以将相同索引的结果限制在特定范围内,如以下示例所示:
注意
在版本4.0中更改:所指定的界限$max必须大于所指定的界限$min。
db.collection.find().min( { age: 20 } ).max( { age: 25 } ).hint( { age: 1 } )