cursor.min()
On this page
Definition
cursor.min()
Important
mongosh Method
This is a
mongosh
method. This is not the documentation forNode.js
or other programming language specific driver methods.In most cases,
mongosh
methods work the same way as the legacymongo
shell methods. However, some legacy methods are unavailable inmongosh
.For the legacy
mongo
shell documentation, refer to the documentation for the corresponding MongoDB Server release:For MongoDB API drivers, refer to the language specific MongoDB driver documentation.
Specifies the inclusive lower bound for a specific index in order to constrain the results of
find()
.min()
provides a way to specify lower bounds on compound key indexes.The
min()
method has the following parameter:ParameterTypeDescriptionindexBounds
document
The inclusive lower bound for the index keys.
The
indexBounds
parameter has the following prototype form:{ field1: <min value>, field2: <min value2>, fieldN:<min valueN> }
Note
Index Use
See also:
min()
exists primarily to support the
mongos
process, and is a shell wrapper around the
query modifier $min
.
Note
Deprecated since v3.2
Starting in v3.2, the $min
operator is deprecated in
mongosh
. In mongosh
,
use cursor.min()
instead.
Compatibility
This method is available in deployments hosted in the following environments:
MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud
Note
This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.
MongoDB Enterprise: The subscription-based, self-managed version of MongoDB
MongoDB Community: The source-available, free-to-use, and self-managed version of MongoDB
Behaviors
Interaction with Index Selection
Because min()
requires an index on a
field, and forces the query to use this index, you may prefer
the $gte
operator for the query if
possible. 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 if
the index on _id
may be better.
Index Bounds
min()
without max()
The $min
and $max
operators indicate that the system
should avoid normal query planning. Instead they construct an index scan where
the index bounds are explicitly specified by the values given in
$min
and $max
.
Warning
If one of the two boundaries is not specified, the query plan will be an index scan that is unbounded on one side. This may degrade performance compared to a query containing neither operator, or one that uses both operators to more tightly constrain the index scan.
Example
Unless the find()
query is an equality condition on
the _id
field { _id: <value> }
, you must explicitly specify the
index with the hint()
method to run min()
.
For the examples below, create a sample collection named products
that holds the
following 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 documents that 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 or above the index key bound ofprice
equal to1.39
andmax()
limits the query to the documents that are below the index key bound ofprice
equal to1.99
: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") }