Definição
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.
Parâmetros
O método max()
tem o seguinte parâmetro:
Parâmetro | Tipo | Descrição |
---|---|---|
| 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
Dica
max()
existe principalmente para dar suporte ao processo mongos
(fragmentação).
Compatibilidade
Esse método está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Observação
Este comando é aceito em todos os clusters do MongoDB Atlas. Para obter informações sobre o suporte do Atlas a todos os comandos, consulte Comandos não suportados.
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Comportamento
Interação com a seleção de índices
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: Decimal128("1.39") } ).hint( { price: 1 } )
A query usará o índice no campo price
, mesmo que o índice em _id
possa ser melhor.
Limites do Índice
max()
sem 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.
Exemplo
Observação
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" : Decimal128("1.99") }, { "_id" : 2, "item" : "apple", "type" : "fuji", "price" : Decimal128("1.99") }, { "_id" : 3, "item" : "apple", "type" : "jonagold", "price" : Decimal128("1.29") }, { "_id" : 4, "item" : "apple", "type" : "jonathan", "price" : Decimal128("1.29") }, { "_id" : 5, "item" : "apple", "type" : "mcintosh", "price" : Decimal128("1.29") }, { "_id" : 6, "item" : "apple", "type" : "cortland", "price" : Decimal128("1.29") }, { "_id" : 7, "item" : "orange", "type" : "cara cara", "price" : Decimal128("2.99") }, { "_id" : 9, "item" : "orange", "type" : "satsuma", "price" : Decimal128("1.99") }, { "_id" : 8, "item" : "orange", "type" : "valencia", "price" : Decimal128("0.99") }, { "_id" : 10, "item" : "orange", "type" : "navel", "price" : Decimal128("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 deitem
igual aapple
etype
igual ajonagold
: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" : Decimal128("1.29") } { "_id" : 2, "item" : "apple", "type" : "fuji", "price" : Decimal128("1.99") } { "_id" : 1, "item" : "apple", "type" : "honey crisp", "price" : Decimal128("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 índiceprice
igual aDecimal128("1.99")
emin()
limita a query aos documentos que estão no limite ou acima do limite da chave do índice deprice
igual aDecimal128("1.39")
:db.products.find().min( { price: Decimal128("1.39") } ).max( { price: Decimal128("1.99") } ).hint( { price: 1 } ) A consulta retorna os seguintes documentos:
{ "_id" : 10, "item" : "orange", "type" : "navel", "price" : Decimal128("1.39") }