Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

$max

在此页面上

  • 定义
  • 行为
  • 示例
$max

注意

自 v3.2 起已弃用

从 v 3.2开始, $max操作符在mongosh中已弃用。 在mongosh中,请改用 cursor.max()

指定$max值以指定特定索引的排他性上限,从而约束find()的结果。 $max按顺序指定特定索引的所有键的上限。

mongosh提供了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> }上。

由于max()需要字段上的索引,并强制查询使用此索引,因此如果可能,您可能更愿意使用$lt操作符进行查询。 考虑以下示例:

db.collection.find( { _id: { $in: [ 6, 7 ] } } ).max( { age: 25 } ).hint( { age: 1 } )

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

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

  • $min$max 中指定的索引边界必须同时指向同一索引的键。

  • $max指定的边界必须大于$min指定的边界。

    4.0 版本中的更改

$min$max操作符表示系统应避免正常的查询计划。 相反,它们会构造一次索引扫描,其中索引边界由$min$max中给出的值显式指定。

警告

如果未指定两个边界之一,则查询计划将是一侧无界的索引扫描。相较于不包含任何操作符的查询,或使用两个操作符更严格地约束索引扫描的查询,这可能会降低性能。

以下示例使用mongosh包装器。

请考虑对名为collection且具有索引{ age: 1 }的集合执行以下操作:

db.collection.find( { <query> } ).max( { age: 100 } ).hint( { age: 1 } )

此操作将查询限制为字段age小于100的文档,并强制执行扫描从MinKey到100的{ age: 1 }索引的查询计划。

单独使用$max或与$min结合使用可将同一索引的结果限制在特定范围内,如下例所示:

注意

从 MongoDB 4.0开始, $max指定的边界必须大于$min指定的边界。

db.collection.find().min( { age: 20 } ).max( { age: 25 } ).hint( { age: 1 } )

后退

$hint

在此页面上