Specify a $max value to specify the exclusive upper bound for a specific index in order to constrain the results of find(). The mongo shell provides the max() wrapper method:

db.collection.find( { <query> } ).max( { field1: <max value>, ... fieldN: <max valueN> } )

You can also specify the option with either of the two forms:

db.collection.find( { <query> } )._addSpecial( "$max", { field1: <max value1>, ... fieldN: <max valueN> } )
db.collection.find( { $query: { <query> }, $max: { field1: <max value1>, ... fieldN: <max valueN> } } )

The $max specifies the upper bound for all keys of a specific index in order.

Consider the following operations on a collection named collection that has an index { age: 1 }:

db.collection.find( { <query> } ).max( { age: 100 } )

This operation limits the query to those documents where the field age is less than 100 using the index { age: 1 }.

You can explicitly specify the corresponding index with hint(). Otherwise, MongoDB selects the index using the fields in the indexBounds; however, if multiple indexes exist on same fields with different sort orders, the selection of the index may be ambiguous.

Consider a collection named collection that has the following two indexes:

{ age: 1, type: -1 }
{ age: 1, type: 1 }

Without explicitly using hint(), MongoDB may select either index for the following operation:

db.collection.find().max( { age: 50, type: 'B' } )

Use $max alone or in conjunction with $min to limit results to a specific range for the same index, as in the following example:

db.collection.find().min( { age: 20 } ).max( { age: 25 } )


Because max() requires an index on a field, and forces the query to use this index, you may prefer the $lt operator for the query if possible. Consider the following example:

db.collection.find( { _id: 7 } ).max( { age: 25 } )

The query uses the index on the age field, even if the index on _id may be better.

←   $maxTimeMS $min  →