定義
cursor.min()find()の結果を制限するために、特定のインデックスの包括的下限を指定します。 は、複合キーmin()インデックスの下限を指定する方法を提供します。min()メソッドには次のパラメーターがあります。Parameterタイプ説明indexBoundsドキュメント
インデックス キーの包括的下限。
indexBoundsパラメータのプロトタイプ形式は次のとおりです。{ field1: <min value>, field2: <min value2>, fieldN:<min valueN> }
注意
インデックスの使用
max()hint()メソッドでインデックスを使用するには、find() クエリが フィールドの等価条件である場合を除き、_id メソッドを使用して使用するインデックスを指定する必要があります。
Tip
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
- MongoDB Atlas はクラウドでのMongoDB配置のためのフルマネージド サービスです
注意
このコマンドは、すべてのMongoDB Atlasクラスターでサポートされています。すべてのコマンドの Atlas サポートの詳細については、「 サポートされていないコマンド 」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
動作
インデックス選択との相互作用
min()にはフィールドのインデックスが必要であり、クエリにこのインデックスを使用するように強制されるため、可能であれば、クエリには 演算子を使用することをお勧めします。次の$gte の例で考えてみましょう。
db.products.find( { _id: { $in: [ 6, 7 ] } } ).min( { price: Decimal128("1.39") } ).hint( { price: 1 } )
クエリは、 _idのインデックスがより優れている場合でも、 priceフィールドのインデックスを使用します。
インデックスの限界
min()範囲を指定するためにmax() と を使用する場合
によって指定された限界は、
max()min()によって指定された限界よりも大きくなければなりません。
min() 次のない: max()
min()メソッドとmax() メソッドは、システムが通常のクエリ計画を回避する必要があることを示します。インデックスの限界がmin() とmax() に指定された値によって明示的に指定されるインデックススキャンを構築します。
警告
2 つの境界のいずれかが指定されていない場合、クエリプランは一方では無制限のインデックススキャンになります。 これはどちらの演算子も含まないクエリ、または両方の演算子を使用してインデックス スキャンをより厳密に制限するクエリと比較して、パフォーマンスを低下させる可能性があります。
例
find()クエリが フィールド_id { _id: <value> }の等価条件でない限り、 を実行するにはhint() min()メソッドでインデックスを明示的に指定する必要があります。
以下の例では、次のドキュメントを含むproductsという名前のサンプル コレクションを作成します。
db.products.insertMany([ { "_id" : 1, "item" : "apple", "type" : "honey crisp", "price" : Decimal128("1.99") }, { "_id" : 2, "item" : "apple", "type" : "fuji", "price" : Decimal128("1.99") }, { "_id" : 3, "item" : "apple", "type" : "jonagold", "price" : Decimal128("1.29") }, { "_id" : 4, "item" : "apple", "type" : "jonathan", "price" : Decimal128("1.29") }, { "_id" : 5, "item" : "apple", "type" : "mcintosh", "price" : Decimal128("1.29") }, { "_id" : 6, "item" : "apple", "type" : "cortland", "price" : Decimal128("1.29") }, { "_id" : 7, "item" : "orange", "type" : "cara cara", "price" : Decimal128("2.99") }, { "_id" : 9, "item" : "orange", "type" : "satsuma", "price" : Decimal128("1.99") }, { "_id" : 8, "item" : "orange", "type" : "valencia", "price" : Decimal128("0.99") }, { "_id" : 10, "item" : "orange", "type" : "navel", "price" : Decimal128("1.39") } ])
コレクションに次のインデックスを作成します。
db.products.createIndexes( [ { "item" : 1, "type" : 1 }, { "item" : 1, "type" : -1 }, { "price" : 1 } ] )
インデックスの順序を使用して、
{ item: 1, type: 1 }min()itemappletypejonagoldは、次のように、 が に等しく、かつ が に等しいインデックスキーの限界以上にあるドキュメントにクエリを制限します。以下は次のとおりです。db.products.find().min( { item: 'apple', type: 'jonagold' } ).hint( { item: 1, type: 1 } ) このクエリでは次のドキュメントが返されます。
{ "_id" : 3, "item" : "apple", "type" : "jonagold", "price" : Decimal128("1.29") } { "_id" : 4, "item" : "apple", "type" : "jonathan", "price" : Decimal128("1.29") } { "_id" : 5, "item" : "apple", "type" : "mcintosh", "price" : Decimal128("1.29") } { "_id" : 7, "item" : "orange", "type" : "cara cara", "price" : Decimal128("2.99") } { "_id" : 10, "item" : "orange", "type" : "navel", "price" : Decimal128("1.39") } { "_id" : 9, "item" : "orange", "type" : "satsuma", "price" : Decimal128("1.99") } { "_id" : 8, "item" : "orange", "type" : "valencia", "price" : Decimal128("0.99") } { price: 1 }min()インデックス の順序付けを使用すると、price1.39max()price1.99は のインデックスキーの限界が に等しいドキュメントにクエリを制限し、 はクエリを 未満のドキュメントに制限します。 のインデックスキーの限界が に等しい:注意
で指定される限界は
max()min()で指定される限界よりも大きくなければなりません。db.products.find().min( { price: Decimal128("1.39") } ).max( { price: Decimal128("1.99") } ).hint( { price: 1 } ) このクエリでは次のドキュメントが返されます。
{ "_id" : 10, "item" : "orange", "type" : "navel", "price" : Decimal128("1.39") }