$max
定義
$max
Specify a
$max
value to specify the exclusive upper bound for a specific index in order to constrain the results offind()
.$max
は、特定のインデックスのすべてのキーの上限を の順序で指定します。db.collection.find( { <query> } ).max( { field1: <max value>, ... fieldN: <max valueN> } ) 次の 2 つの形式のいずれかで
$max
を指定することもできます。db.collection.find( { <query> } )._addSpecial( "$max", { field1: <max value1>, ... fieldN: <max valueN> } ) db.collection.find( { $query: { <query> }, $max: { field1: <max value1>, ... fieldN: <max valueN> } } )
動作
インデックス選択との相互作用
max()
にはフィールドのインデックスが必要で、クエリにこのインデックスを使用するように強制されるため、可能であればクエリに$lt
演算子を使用することをお勧めします。 次の例で考えてみましょう。
db.collection.find( { _id: { $in: [ 6, 7 ] } } ).max( { age: 25 } ).hint( { age: 1 } )
クエリは、 _id
のインデックスがより優れている場合でも、 age
フィールドのインデックスを使用します。
インデックスの限界
$max
によって指定される限界は、$min
によって指定される限界よりも大きくなければなりません。バージョン 4.0 で変更。
$max
次のない: $min
$min
演算子と$max
演算子は、システムが通常のクエリ計画を回避する必要があることを示します。 代わりに、インデックスの限界が$min
と$max
に指定された値によって明示的に指定されるインデックススキャンを構築します。
警告
2 つの境界のいずれかが指定されていない場合、クエリプランは一方では無制限のインデックススキャンになります。 これはどちらの演算子も含まないクエリ、または両方の演算子を使用してインデックス スキャンをより厳密に制限するクエリと比較して、パフォーマンスを低下させる可能性があります。
例
次の例ではmongosh
ラッパーを使用します。
排他的上限の指定
インデックス{ age: 1 }
collection
持つ という名前のコレクションに対する次の操作を検討します。
db.collection.find( { <query> } ).max( { age: 100 } ).hint( { age: 1 } )
この操作は、フィールドage
が100
より小さいドキュメントにクエリを制限し、 { age: 1 }
インデックスをMinKeyから100にスキャンするクエリプランを強制します。
以下と一緒に使用する $min
次の例のように、$max
$min
同じ インデックスの特定の範囲に結果を制限するには、 を単独で使用するか、 と組み合わせて使用します。
注意
MongoDB 4.0以降、 $max
で指定された限界は$min
で指定された限界よりも大きくなければなりません。
db.collection.find().min( { age: 20 } ).max( { age: 25 } ).hint( { age: 1 } )