$max

在本页面

Definition

$max

Note

  • 从 v3.2 开始在mongo Shell 中弃用

  • 从 v3.2 开始,$max运算符在mongo shell 中已弃用。在mongoShell 中,改用cursor.max()

指定$max值以指定特定索引的* exclusive 上限,以约束find()的结果。 $max按 Sequences指定特定索引的全部键的上限。

mongo shell 提供了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> } } )

Behavior

与索引选择的交互

因为max()需要在字段上构建索引,并强制查询使用该索引,所以如果可能的话,您可能更喜欢使用$lt运算符进行查询。考虑以下示例:

db.collection.find( { _id: 7 } ).max( { age: 25 } )

该查询将使用age字段上的索引,即使_id上的索引可能更好。

Index Bounds

如果您使用$max$min来指定范围:

在版本 3.6.6 中进行了更改。

$ max,无$ min

minmax运算符指示系统应避免常规查询计划。相反,它们构造索引扫描,其中索引范围由minmax中给出的值明确指定。

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 *索引的特定范围内,如以下示例所示:

Note

在版本 3.6.6 中更改:$max指定的界限必须大于$min指定的界限。

db.collection.find().min( { age: 20 } ).max( { age: 25 } )
首页