cursor.min()
Definition
mongo
Shell Method
This page documents the mongo
shell method, and doesnot refer to the MongoDB Node.js driver (or any other driver)method. For corresponding MongoDB driver API, refer to your specificMongoDB driver documentation instead.
Specifies the inclusive lower bound for a specific index in orderto constrain the results offind()
. min()
provides away to specify lower bounds on compound key indexes.
The min()
method has the following parameter:
ParameterTypeDescriptionindexBounds
documentThe inclusive lower bound for the index keys.
The indexBounds
parameter has the following prototype form:
- { field1: <min value>, field2: <min value2>, fieldN:<min valueN> }
See also
min()
exists primarily to support themongos
process, and is a shell wrapper around thequery modifier $min
.
Deprecated since v3.2
Starting in v3.2, the $min
operator is deprecated in themongo
shell. In the mongo
shell,use cursor.min()
instead.
Behaviors
Interaction with Index Selection
Because min()
requires an index on afield, and forces the query to use this index, you may preferthe $gte
operator for the query ifpossible. Consider the following example:
- db.products.find( { $in: [ 6, 7 ] } ).min( { price: NumberDecimal("1.39") } ).hint( { price: 1 })
The query will use the index on the price
field, even ifthe index on _id
may be better.
Index Bounds
If you use min()
with max()
tospecify a range:
the index bounds specified in
min()
andmax()
must both refer to the keys of the same index.the bound specified by
max()
must be greater thanthe bound specified bymin()
.
Changed in version 4.0.
min() without max()
The min
and max
operators indicate that the systemshould avoid normal query planning. Instead they construct an index scan wherethe index bounds are explicitly specified by the values given inmin
and max
.
Warning
If one of the two boundaries is not specified, the query plan will bean index scan that is unbounded on one side. This may degrade performancecompared to a query containing neither operator, or one that uses bothoperators to more tightly constrain the index scan.
Example
Starting in MongoDB 4.2, you must explicitly specify the particularindex with the hint()
method to runmin()
with the following exception: you do notneed to hint if the find()
query is anequality condition on the _id
field { _id: <value> }
.
For the examples below, create a sample collection named products
that holds thefollowing documents:
- 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") }
- ])
Create the following indexes for the collection:
- db.products.createIndexes( [
- { "item" : 1, "type" : 1 },
- { "item" : 1, "type" : -1 },
- { "price" : 1 }
- ] )
- Using the ordering of the
{ item: 1, type: 1 }
index,min()
limits the query to the documentsthat are at or above the index key bound ofitem
equal toapple
andtype
equal tojonagold
, as in the following:
- db.products.find().min( { item: 'apple', type: 'jonagold' } ).hint( { item: 1, type: 1 } )
The query returns the following documents:
- { "_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" : 7, "item" : "orange", "type" : "cara cara", "price" : NumberDecimal("2.99") }
- { "_id" : 10, "item" : "orange", "type" : "navel", "price" : NumberDecimal("1.39") }
- { "_id" : 9, "item" : "orange", "type" : "satsuma", "price" : NumberDecimal("1.99") }
- { "_id" : 8, "item" : "orange", "type" : "valencia", "price" : NumberDecimal("0.99") }
- Using the ordering of the index
{ price: 1 }
,min()
limits the query to the documents that are at orabove the index key bound ofprice
equal to1.39
andmax()
limits the query to the documentsthat are below the index key bound ofprice
equal to1.99
:
Note
Changed in version 4.0: The bound specified by max()
must be greaterthan the bound specified by min()
.
- db.products.find().min( { price: NumberDecimal("1.39") } ).max( { price: NumberDecimal("1.99") } ).hint( { price: 1 } )
The query returns the following documents:
- { "_id" : 10, "item" : "orange", "type" : "navel", "price" : NumberDecimal("1.39") }