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()
にはフィールドのインデックスが必要であり、クエリにこのインデックスを使用するように強制されるため、可能であればクエリに$lt
演算子を使用することをお勧めします。 次の例で考えてみましょう。
db.products.find( { _id: { $in: [ 6, 7 ] } } ).max( { price: NumberDecimal("1.39") } ).hint( { price: 1 } )
クエリは、 _id
のインデックスがより優れている場合でも、 price
フィールドのインデックスを使用します。
インデックスの限界
max()
によって指定される限界は、min()
によって指定される限界よりも大きくなければなりません。
max()
次のない: min()
min()
メソッドとmax()
メソッドは、システムが通常のクエリ計画を回避する必要があることを示しています。 インデックスの限界がmin()
とmax()
に指定された値によって明示的に指定されるインデックススキャンを構築します。
警告
2 つの境界のいずれかが指定されていない場合、クエリプランは一方では無制限のインデックススキャンになります。 これはどちらの演算子も含まないクエリ、または両方の演算子を使用してインデックス スキャンをより厳密に制限するクエリと比較して、パフォーマンスを低下させる可能性があります。
例
注意
以下の例では、次のドキュメントを含む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 } ] )
{ item: 1, type: 1 }
インデックスの順序を使用して、max()
はクエリを、item
がapple
に等しく、かつtype
が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") }