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

cursor.max()

在此页面上

  • 定义
  • 行为
  • 例子
cursor.max()

重要

mongosh 方法

本页面提供 mongosh 方法的相关信息。这不是特定于语言的驱动程序(例如 Node.js)的文档。

如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。

指定特定索引的独占上限,以约束 find()的结果。 max()提供了一种指定复合键索引上限的方法。

max() 方法具有以下参数:

Parameter
类型
说明
indexBounds
文档
索引键的独占上限。

indexBounds参数具有以下原型形式:

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

这些字段按顺序对应于特定索引的所有键。

注意

索引使用

要与 max() 方法一起使用索引,必须通过 hint() 方法指定要使用的索引,除非 find() 查询是 _id 字段的相等条件。

提示

另请参阅:

max()的存在主要是为了支持mongos (分片)进程。

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

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

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

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

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

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

min()max()方法指示系统应避免正常的查询计划。 它们构造索引扫描,其中索引边界由min()max()中给出的值显式指定。

警告

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

注意

您必须使用hint()方法显式指定特定索引才能运行max() ,但以下情况除外:您不需要提示find()查询是否是_id字段{ _id: <value> }上的相等条件。

对于以下示例,创建一个名为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") }
])

为数据集创建以下索引:

db.products.createIndexes( [
{ "item" : 1, "type" : 1 },
{ "item" : 1, "type" : -1 },
{ "price" : 1 }
] )
  • max()使用{ item: 1, type: 1 }索引的排序,将查询限制为低于item等于appletype等于jonagold边界的文档:

    db.products.find().max( { item: 'apple', type: 'jonagold' } ).hint( { item: 1, type: 1 } )

    该查询返回以下文档:

    { "_id" : 6, "item" : "apple", "type" : "cortland", "price" : NumberDecimal("1.29") }
    { "_id" : 2, "item" : "apple", "type" : "fuji", "price" : NumberDecimal("1.99") }
    { "_id" : 1, "item" : "apple", "type" : "honey crisp", "price" : NumberDecimal("1.99") }
  • 利用索引 { price: 1 } 排序,max() 将查询限制为 price 低于索引键边界 NumberDecimal("1.99") 的文档,min() 将查询限制为 price 等于或高于索引键边界 NumberDecimal("1.39") 的文档:

    注意

    max() 指定的边界必须大于 min() 指定的边界。

    db.products.find().min( { price: NumberDecimal("1.39") } ).max( { price: NumberDecimal("1.99") } ).hint( { price: 1 } )

    该查询返回以下文档:

    { "_id" : 10, "item" : "orange", "type" : "navel", "price" : NumberDecimal("1.39") }

后退

cursor.map

在此页面上