OPTIONS

cursor.max()

Definition

cursor.max()

Specifies the exclusive upper bound for a specific index in order to constrain the results of find(). max() provides a way to specify an upper bound on compound key indexes.

The max() method has the following parameter:

Parameter Type Description
indexBounds document The exclusive upper bound for the index keys.

The indexBounds parameter has the following prototype form:

{ field1: <max value>, field2: <max value2> ... fieldN:<max valueN>}

The fields correspond to all the keys of a particular index in order. You can explicitly specify the particular index with the hint() method. Otherwise, mongod 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.

See also

min().

Note

max() is a shell wrapper around the query modifier $max.

Behavior

  • 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.products.find( { _id: 7 } ).max( { price: 1.39 } )
    

    The query will use the index on the price field, even if the index on _id may be better.

  • max() exists primarily to support the mongos (sharding) process.

  • If you use max() with min() to specify a range, the index bounds specified in min() and max() must both refer to the keys of the same index.

Example

This example assumes a collection named products that holds the following documents:

{ "_id" : 6, "item" : "apple", "type" : "cortland", "price" : 1.29 }
{ "_id" : 2, "item" : "apple", "type" : "fuji", "price" : 1.99 }
{ "_id" : 1, "item" : "apple", "type" : "honey crisp", "price" : 1.99 }
{ "_id" : 3, "item" : "apple", "type" : "jonagold", "price" : 1.29 }
{ "_id" : 4, "item" : "apple", "type" : "jonathan", "price" : 1.29 }
{ "_id" : 5, "item" : "apple", "type" : "mcintosh", "price" : 1.29 }
{ "_id" : 7, "item" : "orange", "type" : "cara cara", "price" : 2.99 }
{ "_id" : 10, "item" : "orange", "type" : "navel", "price" : 1.39 }
{ "_id" : 9, "item" : "orange", "type" : "satsuma", "price" : 1.99 }
{ "_id" : 8, "item" : "orange", "type" : "valencia", "price" : 0.99 }

The collection has the following indexes:

{ "_id" : 1 }
{ "item" : 1, "type" : 1 }
{ "item" : 1, "type" : -1 }
{ "price" : 1 }
  • Using the ordering of { item: 1, type: 1 } index, max() limits the query to the documents that are below the bound of item equal to apple and type equal to jonagold:

    db.products.find().max( { item: 'apple', type: 'jonagold' } ).hint( { item: 1, type: 1 } )
    

    The query returns the following documents:

    { "_id" : 6, "item" : "apple", "type" : "cortland", "price" : 1.29 }
    { "_id" : 2, "item" : "apple", "type" : "fuji", "price" : 1.99 }
    { "_id" : 1, "item" : "apple", "type" : "honey crisp", "price" : 1.99 }
    

    If the query did not explicitly specify the index with the hint() method, it is ambiguous as to whether mongod would select the { item: 1, type: 1 } index ordering or the { item: 1, type: -1 } index ordering.

  • Using the ordering of the index { price: 1 }, max() limits the query to the documents that are below the index key bound of price equal to 1.99 and min() limits the query to the documents that are at or above the index key bound of price equal to 1.39:

    db.products.find().min( { price: 1.39 } ).max( { price: 1.99 } ).hint( { price: 1 } )
    

    The query returns the following documents:

    { "_id" : 6, "item" : "apple", "type" : "cortland", "price" : 1.29 }
    { "_id" : 4, "item" : "apple", "type" : "jonathan", "price" : 1.29 }
    { "_id" : 5, "item" : "apple", "type" : "mcintosh", "price" : 1.29 }
    { "_id" : 3, "item" : "apple", "type" : "jonagold", "price" : 1.29 }
    { "_id" : 10, "item" : "orange", "type" : "navel", "price" : 1.39 }