On this page
$max
在本页面
Definition
$max
Note
从 v3.2 开始在
mongo
Shell 中弃用从 v3.2 开始,$max运算符在mongo shell 中已弃用。在mongoShell 中,改用cursor.max()。
指定$max值以指定特定索引的* exclusive 上限,以约束find()的结果。 $max按 Sequences指定特定索引的全部键的上限。
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> } } )
Behavior
与索引选择的交互
因为max()需要在字段上构建索引,并强制查询使用该索引,所以如果可能的话,您可能更喜欢使用$lt运算符进行查询。考虑以下示例:
db.collection.find( { _id: 7 } ).max( { age: 25 } )
该查询将使用age
字段上的索引,即使_id
上的索引可能更好。
Index Bounds
在版本 3.6.6 中进行了更改。
$ max,无$ min
min
和max
运算符指示系统应避免常规查询计划。相反,它们构造索引扫描,其中索引范围由min
和max
中给出的值明确指定。
Warning
如果未指定两个边界之一,则查询计划将是一侧无边界的索引扫描。与不包含任何运算符或使用两个运算符来更严格地约束索引扫描的查询相比,这可能会降低性能。
Examples
以下示例使用mongo Shell 包装程序。
指定互斥上限
考虑对名为collection
且具有索引{ age: 1 }
的集合进行以下操作:
db.collection.find( { <query> } ).max( { age: 100 } )
此操作将查询限制为字段age
小于100
的那些文档,并强制执行将{ age: 1 }
索引从MinKey扫描到 100 的查询计划。
Index Selection
您可以使用hint()显式指定相应的索引。否则,MongoDB 使用$max和$min边界中的字段选择索引;但是,如果多个索引存在于具有不同排序 Sequences 的相同字段上,则索引的选择可能会模棱两可。
考虑一个名为collection
的集合,该集合具有以下两个索引:
{ age: 1, type: -1 }
{ age: 1, type: 1 }
在不显式使用hint()的情况下,MongoDB 可以为以下操作选择任一索引:
db.collection.find().max( { age: 50, type: 'B' } )
与$ min 一起使用
单独使用$max或与$min结合使用可将结果限制在* same *索引的特定范围内,如以下示例所示:
db.collection.find().min( { age: 20 } ).max( { age: 25 } )