On this page
$min
在本页面
Definition
$min
Note
从 v3.2 开始在
mongo
Shell 中弃用从 v3.2 开始,$min运算符在mongo shell 中已弃用。在mongoShell 中,改用cursor.min()。
指定$min值以指定特定索引的含下界,以约束find()的结果。 $min按 Sequences指定特定索引的所有*键的下限。
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> } } )
Behavior
与索引选择的交互
因为min()需要在字段上构建索引,并强制查询使用该索引,所以如果可能的话,您可能更喜欢使用$gte运算符进行查询。考虑以下示例:
db.collection.find( { _id: 7 } ).min( { age: 25 } )
该查询将使用age
字段上的索引,即使_id
上的索引可能更好。
Index Bounds
在版本 3.6.6 中进行了更改。
$ min,没有$ max
min
和max
运算符指示系统应避免常规查询计划。相反,它们构造索引扫描,其中索引范围由min
和max
中给出的值明确指定。
Warning
如果未指定两个边界之一,则查询计划将是一侧无边界的索引扫描。与不包含任何运算符或使用两个运算符来更严格地约束索引扫描的查询相比,这可能会降低性能。
Examples
以下示例使用mongo Shell 包装程序。
指定下限值
考虑对名为collection
且具有索引{ age: 1 }
的集合进行以下操作:
db.collection.find().min( { age: 20 } )
此操作将查询限制为字段age
至少为20
的那些文档,并强制执行将{ age: 1 }
索引从 20 扫描到MaxKey的查询计划。
Index Selection
您可以使用hint()显式指定相应的索引。否则,MongoDB 使用$max和$min边界中的字段选择索引;但是,如果多个索引存在于具有不同排序 Sequences 的相同字段上,则索引的选择可能会模棱两可。
考虑一个名为collection
的集合,该集合具有以下两个索引:
{ age: 1, type: -1 }
{ age: 1, type: 1 }
如果不显式使用hint(),则不清楚以下操作将选择哪个索引:
db.collection.find().min( { age: 20, type: 'C' } )
与$ max 一起使用
您可以结合使用$min和$max将结果限制为* same *索引的特定范围,如以下示例所示:
db.collection.find().min( { age: 20 } ).max( { age: 25 } )