cursor.max()

On this page本页内容

Definition定义

cursor.max()

mongo Shell Method

This page documents the mongo shell method, and does not refer to the MongoDB Node.js driver (or any other driver) method. 本页记录了mongo shell方法,未提及MongoDB Node.js驱动程序(或任何其他驱动程序)方法。For corresponding MongoDB driver API, refer to your specific MongoDB driver documentation instead.有关相应的MongoDB驱动程序API,请参阅特定的MongoDB驱动程序文档。

Specifies the exclusive upper bound for a specific index in order to constrain the results of find(). 指定特定索引的排除性上限,以约束find()的结果。max() provides a way to specify an upper bound on compound key indexes.提供了一种指定复合键索引上限的方法。

Parameters参数

The max() method has the following parameter:max()方法具有以下参数:

Parameter参数Type类型Description描述
indexBounds document The exclusive upper bound for the index keys.索引键的独占上限。

The indexBounds parameter has the following prototype form:indexBounds参数具有以下原型形式:

{ field1: <max value>, field2: <max value2> ... fieldN:<max valueN> }

The fields correspond to all the keys of a particular index in order.这些字段按顺序对应于特定索引的所有键。

Index Use索引使用

Starting in MongoDB 4.2, you must explicitly specify the particular index with the hint() method to run max() with the following exception: you do not need to hint if the find() query is an equality condition on the _id field { _id: <value> }.从MongoDB 4.2开始,必须使用hint()方法显式指定特定的索引以运行max(),但有以下例外:不需要提示find()查询是否是_id字段{ _id: <value> }上的相等条件。

In previous versions, you could run max() with or without explicitly hinting the index regardless of the query condition. 在以前的版本中,无论查询条件如何,都可以在运行max()时显式暗示索引,也可以不显式暗示索引。If run without the hint in 4.0 and earlier, MongoDB selects the index using the fields in the indexBounds; however, if multiple indexes exist on same fields with different sort orders, the selection of the index may be ambiguous.如果运行时没有4.0及更早版本中的提示,MongoDB将使用indexBounds中的字段选择索引;但是,如果同一字段上存在多个排序顺序不同的索引,则索引的选择可能不明确。

See also参阅

min().

max() exists primarily to support the mongos (sharding) process, and is a shell wrapper around the query modifier $max.max()的存在主要是为了支持mongos(切分)过程,它是围绕查询修饰符$max的shell包装器。

Deprecated since v3.2从v3.2开始就不推荐了

Starting in v3.2, the $max operator is deprecated in the mongo shell. 从v3.2开始,$max运算符在mongo shell中不受欢迎。In the mongo shell, use cursor.max() instead.mongo shell中,请改用cursor.max()

Behavior行为

Interaction with Index Selection与索引选择的互动

Because max() requires an index on a field, and forces the query to use this index, you may prefer the $lt operator for the query if possible. 因为max()需要字段上的索引,并强制查询使用此索引,所以如果可能的话,您可能更喜欢使用$lt运算符进行查询。Consider the following example:考虑下面的例子:

db.products.find( { _id: { $in: [ 6, 7 ] } } ).max( { price: NumberDecimal("1.39") } ).hint( { price: 1 } )

The query will use the index on the price field, even if the index on _id may be better.查询将使用price字段上的索引,即使_id上的索引可能更好。

Index Bounds索引界限

If you use max() with min() to specify a range:如果使用max()min()指定范围:

  • the index bounds specified in min() and max() must both refer to the keys of the same index.min()max()中指定的索引边界必须同时引用同一索引的键。
  • the bound specified by max() must be greater than the bound specified by min().max()指定的界限必须大于min()指定的界限。

    Changed in version 4.0.在版本4.0中更改。

max() without 而不用min()

The min and max operators indicate that the system should avoid normal query planning. minmax运算符表示系统应避免正常的查询计划。Instead they construct an index scan where the index bounds are explicitly specified by the values given in min and max.相反,它们构造一个索引扫描,其中索引边界由minmax中给出的值显式指定。

Warning警告

If one of the two boundaries is not specified, the query plan will be an index scan that is unbounded on one side. 如果未指定两个边界中的一个,则查询计划将是一侧无边界的索引扫描。This may degrade performance compared to a query containing neither operator, or one that uses both operators to more tightly constrain the index scan.与既不包含运算符,也不使用两个运算符来更严格地约束索引扫描的查询相比,这可能会降低性能。

Example示例

Note

Starting in MongoDB 4.2, you must explicitly specify the particular index with the hint() method to run max() with the following exception: you do not need to hint if the find() query is an equality condition on the _id field { _id: <value> }.从MongoDB 4.2开始,必须使用hint()方法显式指定特定的索引以运行max(),但有以下例外:不需要提示find()查询是否是_id字段{ _id: <value> }上的相等条件。

For the examples below, create a sample collection named products that holds the following documents:对于以下示例,请创建一个名为products的样本集合,其中包含以下文档:

db.products.insertMany([
   { "_id" : 1, "item" : "apple", "type" : "honey crisp", "price" : NumberDecimal("1.99") },
   { "_id" : 2, "item" : "apple", "type" : "fuji", "price" : NumberDecimal("1.99") },
   { "_id" : 3, "item" : "apple", "type" : "jonagold", "price" : NumberDecimal("1.29") },
   { "_id" : 4, "item" : "apple", "type" : "jonathan", "price" : NumberDecimal("1.29") },
   { "_id" : 5, "item" : "apple", "type" : "mcintosh", "price" : NumberDecimal("1.29") },
   { "_id" : 6, "item" : "apple", "type" : "cortland", "price" : NumberDecimal("1.29") },
   { "_id" : 7, "item" : "orange", "type" : "cara cara", "price" : NumberDecimal("2.99") },
   { "_id" : 9, "item" : "orange", "type" : "satsuma", "price" : NumberDecimal("1.99") },
   { "_id" : 8, "item" : "orange", "type" : "valencia", "price" : NumberDecimal("0.99") },
   { "_id" : 10, "item" : "orange", "type" : "navel", "price" : NumberDecimal("1.39") }
])

Create the following indexes for the collection:为集合创建以下索引:

db.products.createIndexes( [
   { "item" : 1, "type" : 1 },
   { "item" : 1, "type" : -1 },
   { "price" : 1 }
] )