cursor.max()
Nesta página
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 |
---|---|---|
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
max()
existe principalmente para dar suporte ao processo mongos
(fragmentação).
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: NumberDecimal("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" : 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 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" : 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 índiceprice
igual aNumberDecimal("1.99")
emin()
limita a query aos documentos que estão no limite ou acima do limite da chave do índice deprice
igual aNumberDecimal("1.39")
: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") }