cursor.min()
Nesta página
Definição
cursor.min()
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 inferior inclusivo para um índice específico a fim de restringir os resultados de
find()
.min()
fornece uma maneira de especificar limites inferiores em índices de chave compostos.O método
min()
tem o seguinte parâmetro:ParâmetroTipoDescriçãoindexBounds
documentoO limite inferior inclusivo para as chaves de índice.O parâmetro
indexBounds
tem a seguinte forma de protótipo:{ field1: <min value>, field2: <min value2>, fieldN:<min valueN> }
Observação
Uso do índice
min()
existe principalmente para auxiliar no processo de mongos
.
Comportamentos
Interação com a seleção de índices
Como min()
requer um índice em um campo e força a query a usar esse índice, você pode preferir o operador $gte
para a query, se possível. Considere o seguinte exemplo:
db.products.find( { $in: [ 6, 7 ] } ).min( { 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
min()
sem max()
Os métodos min()
e max()
indicam que o sistema deve evitar o planejamento normal de queries. Eles constroem uma varredura de índice em que os limites do índice são especificados explicitamente pelos valores informados 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
A menos que a consulta find()
seja uma condição de igualdade no campo _id
{ _id: <value> }
, você deve especificar explicitamente o índice com o método hint()
para executar min()
.
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 } ] )
Utilizar a ordenação do índice
{ item: 1, type: 1 }
,min()
limita a query aos documentos que estão no mesmo nível ou acima do limite da chave do índice doitem
igual aapple
etype
igual ajonagold
, conforme mostrado a seguir:db.products.find().min( { item: 'apple', type: 'jonagold' } ).hint( { item: 1, type: 1 } ) A consulta retorna os seguintes documentos:
{ "_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" : 7, "item" : "orange", "type" : "cara cara", "price" : NumberDecimal("2.99") } { "_id" : 10, "item" : "orange", "type" : "navel", "price" : NumberDecimal("1.39") } { "_id" : 9, "item" : "orange", "type" : "satsuma", "price" : NumberDecimal("1.99") } { "_id" : 8, "item" : "orange", "type" : "valencia", "price" : NumberDecimal("0.99") } Usando a ordem do índice
{ price: 1 }
,min()
limita a consulta aos documentos que estão iguais ou acima do limite da chave do índice deprice
igual a1.39
emax()
limita a consulta aos documentos que estão abaixo o limite da chave do índice deprice
igual a1.99
: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") }