Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

cursor.max()

Nesta página

  • Definição
  • Comportamento
  • Exemplo
cursor.max()

Importante

Método mongosh

Esta página documenta um método mongosh. Esta não é a documentação de um driver de idioma específico, como Node.js.

Para drivers de API do MongoDB, consulte a documentação do driver do MongoDB específica da linguagem.

Especifica o limite superior exclusivo para um índice específico para restringir os resultados de find(). max() fornece uma maneira de especificar um limite superior nos índices de chave composta.

O método max() tem o seguinte parâmetro:

Parâmetro
Tipo
Descrição
indexBounds
documento
O limite superior exclusivo para as chaves de índice.

O parâmetro indexBounds tem a seguinte forma de protótipo:

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

Os campos correspondem a todas as chaves de um determinado índice em ordem.

Observação

Uso do índice

Para usar um índice com o método max(), você deve usar o método hint() para especificar o índice que deseja usar, exceto quando a query find() for uma condição de igualdade no campo _id.

Dica

Veja também:

max() existe principalmente para dar suporte ao processo mongos (fragmentação).

Como max() requer um índice em um campo e força a query a usar esse índice, você pode preferir o operador $lt para a query, se possível. Considere o seguinte exemplo:

db.products.find( { _id: { $in: [ 6, 7 ] } } ).max( { price: NumberDecimal("1.39") } ).hint( { price: 1 } )

A query usará o índice no campo price, mesmo que o índice em _id possa ser melhor.

Se você usar max() com min() para especificar uma faixa:

  • os limites do índice especificados em min() e max() devem referir-se às chaves do mesmo índice.

  • o limite especificado por max() deve ser maior que o limite especificado por min().

Os métodos min() e max() indicam que o sistema deve evitar o planejamento normal de query. Eles constroem uma varredura de índice em que os limites do índice são explicitamente especificados pelos valores fornecidos em min() e max().

Aviso

Se um dos dois limites não for especificado, o plano de query será uma varredura de índice sem limites em um dos lados. Isso pode prejudicar o desempenho em comparação com uma query que não contém nenhum operador ou uma que usa ambos os operadores para restringir mais fortemente a verificação de índice.

Observação

Você deve especificar explicitamente o índice específico com o método hint() para executar max() com a seguinte exceção: você não precisa sugerir se a query find() é uma condição de igualdade no campo _id { _id: <value> }.

Para os exemplos abaixo, crie uma collection de amostra chamada products que contenha os seguintes documentos:

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") }
])

Crie os seguintes índices na coleção:

db.products.createIndexes( [
{ "item" : 1, "type" : 1 },
{ "item" : 1, "type" : -1 },
{ "price" : 1 }
] )
  • Usando a ordem do índice { item: 1, type: 1 } , max() limita a consulta aos documentos que estão abaixo do limite de item igual a apple e type igual a jonagold:

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

    A consulta retorna os seguintes documentos:

    { "_id" : 6, "item" : "apple", "type" : "cortland", "price" : NumberDecimal("1.29") }
    { "_id" : 2, "item" : "apple", "type" : "fuji", "price" : NumberDecimal("1.99") }
    { "_id" : 1, "item" : "apple", "type" : "honey crisp", "price" : NumberDecimal("1.99") }
  • Usando a ordenação do índice { price: 1 }, max() limita a query aos documento que estão abaixo do limite da chave do índice price igual a NumberDecimal("1.99") e min() limita a query aos documentos que estão no limite ou acima do limite da chave do índice de price igual a NumberDecimal("1.39"):

    Observação

    O limite especificado por max() deve ser maior do que o limite especificado por min().

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

    A consulta retorna os seguintes documentos:

    { "_id" : 10, "item" : "orange", "type" : "navel", "price" : NumberDecimal("1.39") }
← cursor.map()