此版本的文档已存档,不再提供支持。要升级5.0部署,请参阅 MongoDB 6.0升级程序。
定义
$min
指定
$min
值以指定特定索引的包含性下限,从而约束find()
的结果。$min
按顺序指定特定索引的所有键的下限。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
操作符进行查询。 考虑以下示例:
db.collection.find( { _id: { $in: [ 6, 7 ] } } ).min( { age: 25 } ).hint( { age: 1 } )
查询将使用 age
字段上的索引,即使 _id
上的索引可能更好。
索引边界
$max
指定的边界必须大于$min
指定的边界。4.0 版本中的更改。
$min
没有 $max
$min
和$max
操作符表示系统应避免正常的查询计划。 相反,它们会构造一次索引扫描,其中索引边界由$min
和$max
中给出的值显式指定。
警告
如果未指定两个边界之一,则查询计划将是一侧无界的索引扫描。相较于不包含任何操作符的查询,或使用两个操作符更严格地约束索引扫描的查询,这可能会降低性能。
示例
以下示例使用mongosh
包装器。
指定包含下限
请考虑对名为collection
且具有索引{ age: 1 }
的集合执行以下操作:
db.collection.find().min( { age: 20 } ).hint( { age: 1 } )
此操作将查询限制为字段age
至少为20
的文档,并强制执行扫描从20到MaxKey的{ age: 1 }
索引的查询计划。
与 $max
您可以将$min
与$max
结合使用,将同一索引的结果限制在特定范围,如以下示例:
注意
从MongoDB 4.0开始, $max
指定的边界必须大于$min
指定的边界。
db.collection.find().min( { age: 20 } ).max( { age: 25 } ).hint( { age: 1 } )