$min

在本页面

定义

  • $min

    注意

  • 自 v3.2 以来在mongo Shell 中不推荐使用

指定$min value 以指定 order 中特定索引的包含下限以约束find()的结果。 $min指定 order 中特定索引的所有键的下限。

mongo shell 提供了min() wrapper 方法:

db.collection.find( { <query> } ).min( { field1: <min value>, ... fieldN: <min valueN>} )

您还可以使用以下两种形式之一指定选项:

db.collection.find( { <query> } )._addSpecial( "$min", { field1: <min value1>, ... fieldN: <min valueN> } )
db.collection.find( { $query: { <query> }, $min: { field1: <min value1>, ... fieldN: <min valueN> } } )

行为

与索引选择的交互

因为min()需要字段上的索引,并强制查询使用此索引,所以如果可能,您可能更喜欢$gte operator 用于查询。考虑以下 example:

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

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

指数界限

如果使用$max$min指定范围,

  • $min$max中指定的索引边界必须都引用相同索引的键。

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

更改了 version 3.6.6.

$min 没有$max

minmax operators 表示系统应该避免正常的查询计划。相反,它们构造索引扫描,其中索引边界由minmax中给出的值显式指定。

警告 如果未指定两个边界之一,则查询计划将是一侧无限制的索引扫描。与不包含 operator 的查询相比,这可能会降低 performance,或者使用两个 operators 来更严格地约束索引扫描的查询。

例子

以下示例使用mongo shell 包装器。

指定包含下限

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

db.collection.find().min( { age: 20 } )

此操作将查询限制为字段age至少为20的那些文档,并强制将{ age: 1 }索引从 20 扫描到MaxKey的查询计划。

索引选择

您可以使用hint()显式指定相应的索引。否则,MongoDB 使用$max$min边界中的字段选择索引;但是,如果在具有不同排序顺序的相同字段上存在多个索引,则索引的选择可能不明确。

考虑一个名为collection的集合,它具有以下两个索引:

{ age: 1, type: -1 }
{ age: 1, type: 1 }

如果没有明确使用hint(),则不清楚以下操作将选择哪个索引:

db.collection.find().min( { age: 20, type: 'C' } )

与$max 一起使用

您可以将$min$max结合使用,将结果限制为同一索引的特定范围,如下面的 example:

注意 更改 version 3.6.6:$max指定的边界必须大于$min指定的边界。

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