Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

cursor.min()

Nesta página

  • Definição
  • Comportamentos
  • Exemplo
cursor.min()

Importante

Método mongosh

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

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

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âmetro
Tipo
Descrição
indexBounds
documento
O 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

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

Dica

Veja também:

min() existe principalmente para dar suporte ao processo mongos .

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 utilizará o índice no campo price , mesmo que o índice em _id possa ser melhor.

Se você usar min() com max() 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 verificação de índice ilimitada em um lado. Isso pode degradar o desempenho em comparação com uma query que não contenha nenhum operador ou uma que use ambos os operadores para restringir com mais força a verificação do índice.

A partir do MongoDB 4.2, você deve especificar explicitamente o índice específico com o método hint() para executar min() 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 para a coleção:

db.products.createIndexes( [
{ "item" : 1, "type" : 1 },
{ "item" : 1, "type" : -1 },
{ "price" : 1 }
] )
  • Usando a ordem do índice { item: 1, type: 1 } , min() limita a consulta aos documentos que estejam no limite da chave do índice ou acima de item igual a apple e type igual a jonagold, como no seguinte:

    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 de price igual a 1.39 e max() limita a consulta aos documentos que estão abaixo o limite da chave do índice de price igual a 1.99:

    Observação

    O limite especificado por max() deve ser maior 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.maxTimeMS()