Página inicial do Docs → Desenvolver aplicações → Manual do MongoDB
db.collection.find()
Definição
db.collection.find(query, projection, options)
Importante
Método mongosh
Esta página documenta um método
mongosh
. Esta não é a documentação para comandos de banco de dados ou drivers específicos de idioma, como Node.js.Para o comando do banco de dados, consulte o comando
find
.Para drivers de API do MongoDB, consulte a documentação do driver MongoDB específica do idioma.
Para a documentação de shell legada do
mongo
, consulte a documentação para a versão correspondente do MongoDB Server:Seleciona documentos em uma coleção ou exibição e retorna um cursor para os documentos selecionados.
Retorna: Um cursor para os documentos que correspondem aos critérios query
. Quando o métodofind()
"retorna documentos," o método está, na verdade, retornando um cursor para os documentos.
Compatibilidade
Você pode utilizar o db.collection.find()
para implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações MongoDB na nuvem
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão código-disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
O método find()
tem o seguinte formulário:
db.collection.find( <query>, <projection>, <options> )
O método find()
utiliza os seguintes parâmetros:
Parâmetro | Tipo | Descrição |
---|---|---|
documento | Opcional. Especifica o filtro de seleção utilizando operadores de consulta. Para devolver todos os documentos em uma coleção, omita este parâmetro ou passe um documento vazio ( | |
documento | Opcional. Especifica os campos a serem retornados nos documentos que correspondem ao query filter. Para retornar todos os campos nos documentos correspondentes, omita este parâmetro. Para obter detalhes, consulte Projeção. | |
documento | Opcional. Especifica opções adicionais para a query. Estas opções modificam o comportamento da query e como os resultados são retornados. Para obter detalhes, consulte Opções. |
Comportamento
Projeção
Importante
Consistência de linguagem
Como parte da criação da projeção find()
e findAndModify()
consistente com o estágio $project
da agregação,
A projeção
find()
efindAndModify()
pode aceitar expressões de aggregation e sintaxe.O MongoDB impõe restrições adicionais em relação às projeções. Consulte Restrições de Projeção para detalhes.
O parâmetro projection
determina quais campos serão retornados nos documentos correspondentes. O parâmetro projection
obtém um documento do seguinte formulário:
{ <field1>: <value>, <field2>: <value> ... }
Projeção | Descrição |
---|---|
<field>: <1 or true> | Especifica a inclusão de um campo. Se você especificar um número inteiro diferente de zero para o valor de projeção, a operação tratará o valor como true . |
<field>: <0 or false> | Especifica a exclusão de um campo. |
"<field>.$": <1 or true> | Usa o operador de projeção de array Não disponível para visualizações. |
<field>: <array projection> | Usa os operadores de projeção de array ( Não disponível para visualizações. |
<field>: <$meta expression> | Usa a expressão do operador Não disponível para visualizações. |
<field>: <aggregation expression> | Especifica o valor do campo projetado. Com o uso de expressões de agregação e sintaxe, incluindo o uso de literais e variáveis de agregação, você pode projetar novos campos ou projetar campos existentes com novos valores.
Nas versões 4.2 e anterior, qualquer valor de especificação (com exceção do valor de documento anteriormente não suportado) é tratado como |
Opções
Opção | Descrição |
---|---|
Permitir o uso do disco | Se os pipelines que exigem mais de 100 megabytes de memória para serem executados gravam ou não em arquivos temporários no disco. Para detalhes, consulte cursor.allowDiskUse() . |
allowPartialResults | Para queries em relação a uma coleção fragmentada, permite que o comando (ou comandos subsequentes getMore) retorne resultados parciais, em vez de um erro, se um ou mais fragmentos analisados não estiverem disponíveis. |
awaitData | Se o cursor for um cursor tailable-await. Requer que o tailable seja true . |
Agrupamento | Configurações de agrupamento para operação de atualização. |
comentário | Adiciona um $comment à query que mostra nos registros do criador de perfil . |
explicar | Os anúncios explicam a saída com base no modo de verbosidade fornecido. |
dica | Força o otimizador de query a usar índices específicos na query. |
limite | Define um limite de documentos retornados no conjunto de resultados. |
max | O limite superior exclusivo para um índice específico. |
maxAwaitTimeMS | O tempo máximo para o servidor aguardar novos documentos para atender a uma query de cursor adaptável. Requer que tailable e awaitData sejam true . |
maxTimeMS | A quantidade máxima de tempo (em milissegundos) que o servidor deve permitir que a query seja executada. |
min | O limite inferior inclusivo para um índice específico. |
noCursorTimeout | Se o servidor deve atingir o tempo limite do cursor após um período de inatividade (por padrão 10 minutos). |
readConcern | Especifica o nível de read concern para a query. |
readPreference | Especifica o nível de read preference para a query. |
returnKey | Se apenas as chaves de índice são retornadas para uma query. |
showRecordId | Se o campo $recordId for adicionado aos documentos retornados. O $recordId indica a posição do documento no conjunto de resultados. |
ignorar | Quantos documentos devem ser ignorados antes de retornar o primeiro documento do conjunto de resultados. |
sort | A ordem dos documentos retornados no conjunto de resultados. Os campos especificados na classificação devem ter um índice. |
tailable | Indica se o cursor é tailable. Os cursores de ocorrências permanecem abertos após os resultados iniciais da query se esgotarem. Os cursores tailable estão disponíveis apenas em Capped Collections. |
Especificação de campo incorporada
Para campos em documentos incorporados, você pode especificar o campo usando:
notação de pontos, por exemplo
"field.nestedfield": <value>
formulário aninhado, por exemplo
{ field: { nestedfield: <value> } }
_id
Projeção de campo
O campo _id
é incluído nos documentos retornados por padrão, a menos que você especifique explicitamente _id: 0
na projeção para suprimir o campo.
Inclusão ou exclusão
Uma projection
não pode conter especificações de inclusão e exclusão, com exceção do campo _id
:
Em projeções que incluem explicitamente campos, o campo
_id
é o único campo que você pode excluir explicitamente.Em projeções que excluem explicitamente campos, o campo
_id
é o único campo que você pode incluir explicitamente; entretanto, o campo_id
é incluído por padrão.
Consulte Exemplos de projeção.
Manuseio do cursor
A execução db.collection.find()
em mongosh
itera automaticamente o cursor para exibir até os primeiros documentos 20 . Digite it
para continuar a iteração.
Para acessar os documentos retornados com um driver, use o mecanismo de tratamento de cursor apropriado para a linguagem do driver.
Preocupação de leitura
Para especificar a preocupação de leitura para db.collection.find()
, use o método cursor.readConcern()
.
Type Bracketing
O MongoDB trata alguns tipos de dados como equivalentes para fins de comparação. Por exemplo, tipos numéricos passam por conversão antes da comparação. Entretanto, para a maioria dos tipos de dados, operadores de comparação só realizam comparações em documentos em que o tipo BSON do campo de destino corresponde ao tipo do operando de consulta. Considere a seguinte coleção:
{ "_id": "apples", "qty": 5 } { "_id": "bananas", "qty": 7 } { "_id": "oranges", "qty": { "in stock": 8, "ordered": 12 } } { "_id": "avocados", "qty": "fourteen" }
A consulta a seguir usa $gt
para retornar documentos em que o valor de qty
é maior que 4
.
db.collection.find( { qty: { $gt: 4 } } )
A consulta retorna os seguintes documentos:
{ "_id": "apples", "qty": 5 } { "_id": "bananas", "qty": 7 }
O documento com _id
igual a "avocados"
não é retornado porque seu valor qty
é do tipo string
, enquanto o operando $gt
é do tipo integer
.
O documento com _id
igual a "oranges"
não é retornado porque seu valor de qty
é do tipo object
.
Observação
Para impor tipos de dados em uma coleção, use Validação de esquema.
Sessões
Para cursores criados dentro de uma sessão, você não pode chamar getMore
fora da sessão.
Da mesma forma, para cursores criados fora de uma sessão, você não pode chamar getMore
dentro de uma sessão.
Tempo-limite de inatividade da sessão
Os drivers e mongosh
do MongoDB associam todas as operações a uma sessão de servidor, com exceção de operações de gravação não reconhecidas. Para operações não explicitamente associadas a uma sessão (ou seja, uso Mongo.startSession()
), os drivers do MongoDB e mongosh
criam uma sessão implícita e a associam à operação.
Se uma sessão estiver ociosa por mais de 30 minutos, o servidor MongoDB marcará essa sessão como expirada e poderá fechá-la a qualquer momento. Quando o servidor MongoDB fecha a sessão, ele também elimina todas as operações em andamento e abre os cursores associados à sessão. Isso inclui cursores configurados com noCursorTimeout()
ou maxTimeMS()
com mais de 30 minutos.
Para operações que podem estar ociosas por mais de 30 minutos, associe a operação com uma sessão explícita utilizando Mongo.startSession()
e atualize periodicamente a sessão utilizando o comando refreshSessions
. Consulte Tempo limite de inatividade da sessão para obter mais informações.
Transações
db.collection.find()
pode ser usado dentro de transações distribuídas.
Para cursores criados fora de uma transação, você não pode chamar
getMore
dentro da transação.Para cursores criados em uma transação, não é possível chamar
getMore
fora da transação.
Importante
Na maioria dos casos, uma transação distribuída incorre em um custo de desempenho maior do que as gravações de um único documento, e a disponibilidade de transações distribuídas não deve substituir o design eficaz do esquema. Em muitos cenários, o modelo de dados desnormalizado (documentos e arrays incorporados) continuará a ser ideal para seus dados e casos de uso. Ou seja, para muitos cenários, modelar seus dados adequadamente minimizará a necessidade de transações distribuídas.
Para considerações adicionais sobre o uso de transações (como limite de tempo de execução e limite de tamanho do oplog), consulte também Considerações de produção.
Desconexão do cliente
A partir do MongoDB 4.2, se o cliente que emitiu db.collection.find()
se desconectar antes da conclusão da operação, o MongoDB marcará db.collection.find()
para encerramento usando killOp
.
Exemplos
Os exemplos nesta seção usam documentos da coleção bios onde os documentos geralmente têm a forma:
{ "_id" : <value>, "name" : { "first" : <string>, "last" : <string> }, // embedded document "birth" : <ISODate>, "death" : <ISODate>, "contribs" : [ <string>, ... ], // Array of Strings "awards" : [ { "award" : <string>, year: <number>, by: <string> } // Array of embedded documents ... ] }
Para criar e preencher a coleção bios
, consulte coleção bios.
Encontre todos os documentos em uma coleção
O método find()
sem parâmetros retorna todos os documentos de uma coleção e retorna todos os campos para os documentos. Por exemplo, a operação a seguir retorna todos os documentos na coleção bios:
db.bios.find()
Encontre documentos que correspondam aos critérios de consulta
Consulta por igualdade
A seguinte operação retorna documentos na coleção bios onde
_id
é igual a5
:db.bios.find( { _id: 5 } ) A operação a seguir retorna documentos na coleção bios em que o campo
last
no documento incorporadoname
é igual a"Hopper"
:db.bios.find( { "name.last": "Hopper" } ) Observação
Para acessar campos em um documento incorporado, use notação de ponto (
"<embedded document>.<field>"
).
Consulta usando operadores
Para localizar documentos que correspondam a um conjunto de critérios de seleção, chame find()
com o parâmetro <criteria>
.
O MongoDB fornece vários operadores de consulta para especificar os critérios.
A operação a seguir usa o operador
$in
para retornar documentos na coleção bios em que_id
é igual a5
ouObjectId("507c35dd8fada716c89d0013")
:db.bios.find( { _id: { $in: [ 5, ObjectId("507c35dd8fada716c89d0013") ] } } ) A operação a seguir usa o operador
$gt
retorna todos os documentos da coleçãobios
ondebirth
é maior quenew Date('1950-01-01')
:db.bios.find( { birth: { $gt: new Date('1950-01-01') } } ) A operação a seguir usa o operador
$regex
para retornar documentos na coleção bios em que o camponame.last
começa com a letraN
(ou é"LIKE N%"
)db.bios.find( { "name.last": { $regex: /^N/ } } )
Para obter uma lista dos operadores de consulta, consulte Seletores de consulta.
Consulta para intervalos
Combine operadores de comparação para especificar intervalos para um campo. A operação a seguir retorna dos documentos da coleção bios em que birth
está entre new Date('1940-01-01')
e new Date('1960-01-01')
(exclusivo):
db.bios.find( { birth: { $gt: new Date('1940-01-01'), $lt: new Date('1960-01-01') } } )
Para obter uma lista dos operadores de consulta, consulte Seletores de consulta.
Consulta para múltiplas condições
A seguinte operação retorna todos os documentos da coleção bios onde o campo birth
é greater than
new Date('1950-01-01')
e o campo death
não existe:
db.bios.find( { birth: { $gt: new Date('1920-01-01') }, death: { $exists: false } } )
Para obter uma lista dos operadores de consulta, consulte Seletores de consulta.
Fazer consulta de documentos incorporados
Os exemplos a seguir consultam o campo integrado name
na coleção bios.
Correspondências exatas de consulta em documentos incorporados
A operação a seguir retorna documentos na coleção bios em que o documento incorporado name
é exatamente { first: "Yukihiro", last: "Matsumoto" }
, incluindo a ordem:
db.bios.find( { name: { first: "Yukihiro", last: "Matsumoto" } } )
O campo name
deve corresponder exatamente ao documento incorporado. A consulta não corresponde aos documentos com os seguintes name
campos:
{ first: "Yukihiro", aka: "Matz", last: "Matsumoto" } { last: "Matsumoto", first: "Yukihiro" }
Campos de consulta de um documento incorporado
A seguinte operação retorna documentos na coleção bios onde o documento integrado name
contém um campo first
com o valor "Yukihiro"
e um campo last
com o valor "Matsumoto"
. A consulta usa notação de ponto para acessar campos em um documento incorporado:
db.bios.find( { "name.first": "Yukihiro", "name.last": "Matsumoto" } )
A consulta corresponde ao documento onde o campo name
contém um documento incorporado com o campo first
com o valor "Yukihiro"
e um campo last
com o valor "Matsumoto"
. Por exemplo, a consulta corresponderia documentos com campos name
que possuíam um dos seguintes valores:
{ first: "Yukihiro", aka: "Matz", last: "Matsumoto" } { last: "Matsumoto", first: "Yukihiro" }
Para obter mais informações e exemplos, consulte também Consulta sobre documentos incorporados/aninhados.
Consulta em arrays
Consulta para um elemento de array
Os exemplos a seguir fazem consulta no array contribs
na coleção bios.
A operação a seguir retorna documentos na coleção bios em que o campo array
contribs
contém o elemento"UNIX"
:db.bios.find( { contribs: "UNIX" } ) A operação a seguir retorna documentos na coleção bios em que o campo array
contribs
contém o elemento"ALGOL"
ou"Lisp"
:db.bios.find( { contribs: { $in: [ "ALGOL", "Lisp" ]} } ) A operação a seguir usa o operador de consulta
$all
para retornar documentos na coleção bios onde o campo arraycontribs
contém os elementos"ALGOL"
e"Lisp"
:db.bios.find( { contribs: { $all: [ "ALGOL", "Lisp" ] } } ) Para mais exemplos, consulte
$all
. Consulte também$elemMatch
.A seguinte operação utiliza o operador
$size
para retornar documentos na coleção bios onde o tamanho do arraycontribs
é 4:db.bios.find( { contribs: { $size: 4 } } )
Para obter mais informações e exemplos de consulta em arrays, consulte:
Para obter uma lista de operadores de consulta específicos de array, consulte Array.
Consultas em array de documentos
Os exemplos a seguir fazem consulta no array awards
na coleção bios.
A operação a seguir retorna documentos na coleção bios em que o array
awards
contém um elemento com o campoaward
igual a"Turing Award"
:db.bios.find( { "awards.award": "Turing Award" } ) A operação a seguir retorna documentos na coleção bios em que o array
awards
contém pelo menos um elemento com o campoaward
igual a"Turing Award"
e o campoyear
maior que 1980:db.bios.find( { awards: { $elemMatch: { award: "Turing Award", year: { $gt: 1980 } } } } ) Use o operador
$elemMatch
para especificar vários critérios em um elemento array.
Para obter mais informações e exemplos de consulta em arrays, consulte:
Para obter uma lista de operadores de consulta específicos de array, consulte Array.
Projeções
O parâmetro projeção especifica quais campos retornar. O parâmetro contém especificações de inclusão ou exclusão, e não ambas, a menos que a exclusão seja para o campo _id
.
Observação
A menos que o campo _id
seja explicitamente excluído no documento de projeção _id: 0
, o campo _id
é retornado.
Especifique os campos a serem retornados
A operação a seguir localiza todos os documentos na coleção bios e retorna apenas os campos name
, contribs
e _id
:
db.bios.find( { }, { name: 1, contribs: 1 } )
Observação
A menos que o campo _id
seja explicitamente excluído no documento de projeção _id: 0
, o campo _id
é retornado.
Campos excluídos explicitamente
A seguinte operação faz uma consulta da coleção bios e retorna todos os campos exceto o campo first
no documento incorporado name
e o campo birth
:
db.bios.find( { contribs: 'OOP' }, { 'name.first': 0, birth: 0 } )
Excluir explicitamente o campo _id
Observação
A menos que o campo _id
seja explicitamente excluído no documento de projeção _id: 0
, o campo _id
é retornado.
A operação a seguir localiza documentos na coleção bios e retorna apenas o campo name
e o campo contribs
:
db.bios.find( { }, { name: 1, contribs: 1, _id: 0 } )
Em arrays e documentos incorporados
A operação a seguir consulta a coleção bios e retorna o campo last
no documento incorporado name
e os dois primeiros elementos no array contribs
:
db.bios.find( { }, { _id: 0, 'name.last': 1, contribs: { $slice: 2 } } )
Você também pode especificar campos incorporados usando o formulário aninhado. Por exemplo:
db.bios.find( { }, { _id: 0, name: { last: 1 }, contribs: { $slice: 2 } } )
Use expressão de agregação
A projeção db.collection.find()
pode aceitar expressões de aggregation e sintaxe.
Com o uso de expressões de agregação e sintaxe, você pode projetar novos campos ou projetar campos existentes com novos valores. Por exemplo, a seguinte operação utiliza expressões de agregação para substituir o valor dos campos name
e awards
como também para incluir novos campos reportDate
, reportBy
e reportNumber
.
db.bios.find( { }, { _id: 0, name: { $concat: [ { $ifNull: [ "$name.aka", "$name.first" ] }, " ", "$name.last" ] }, birth: 1, contribs: 1, awards: { $cond: { if: { $isArray: "$awards" }, then: { $size: "$awards" }, else: 0 } }, reportDate: { $dateToString: { date: new Date(), format: "%Y-%m-%d" } }, reportBy: "hellouser123", reportNumber: { $literal: 1 } } )
Para definir o campo reportRun
para o valor 1
A operação retorna os seguintes documentos:
{ "birth" : ISODate("1924-12-03T05:00:00Z"), "contribs" : [ "Fortran", "ALGOL", "Backus-Naur Form", "FP" ], "name" : "John Backus", "awards" : 4, "reportDate" : "2020-06-05", "reportBy" : "hellouser123", "reportNumber" : 1 } { "birth" : ISODate("1927-09-04T04:00:00Z"), "contribs" : [ "Lisp", "Artificial Intelligence", "ALGOL" ], "name" : "John McCarthy", "awards" : 3, "reportDate" : "2020-06-05", "reportBy" : "hellouser123", "reportNumber" : 1 } { "birth" : ISODate("1906-12-09T05:00:00Z"), "contribs" : [ "UNIVAC", "compiler", "FLOW-MATIC", "COBOL" ], "name" : "Grace Hopper", "awards" : 4, "reportDate" : "2020-06-05", "reportBy" : "hellouser123", "reportNumber" : 1 } { "birth" : ISODate("1926-08-27T04:00:00Z"), "contribs" : [ "OOP", "Simula" ], "name" : "Kristen Nygaard", "awards" : 3, "reportDate" : "2020-06-05", "reportBy" : "hellouser123", "reportNumber" : 1 } { "birth" : ISODate("1931-10-12T04:00:00Z"), "contribs" : [ "OOP", "Simula" ], "name" : "Ole-Johan Dahl", "awards" : 3, "reportDate" : "2020-06-05", "reportBy" : "hellouser123", "reportNumber" : 1 } { "birth" : ISODate("1956-01-31T05:00:00Z"), "contribs" : [ "Python" ], "name" : "Guido van Rossum", "awards" : 2, "reportDate" : "2020-06-05", "reportBy" : "hellouser123", "reportNumber" : 1 } { "birth" : ISODate("1941-09-09T04:00:00Z"), "contribs" : [ "UNIX", "C" ], "name" : "Dennis Ritchie", "awards" : 3, "reportDate" : "2020-06-05", "reportBy" : "hellouser123", "reportNumber" : 1 } { "birth" : ISODate("1965-04-14T04:00:00Z"), "contribs" : [ "Ruby" ], "name" : "Matz Matsumoto", "awards" : 1, "reportDate" : "2020-06-05", "reportBy" : "hellouser123", "reportNumber" : 1 } { "birth" : ISODate("1955-05-19T04:00:00Z"), "contribs" : [ "Java" ], "name" : "James Gosling", "awards" : 2, "reportDate" : "2020-06-05", "reportBy" : "hellouser123", "reportNumber" : 1 } { "contribs" : [ "Scala" ], "name" : "Martin Odersky", "awards" : 0, "reportDate" : "2020-06-05", "reportBy" : "hellouser123", "reportNumber" : 1 }
Dica
Veja também:
Iterar o cursor devolvido
O método find()
retorna um cursor para os resultados.
Em mongosh
, se o cursor retornado não for atribuído a uma variável usando a palavra-chave var
, o cursor será automaticamente iterado para acessar até os primeiros 20 documentos que correspondem à query. Você pode atualizar a variável displayBatchSize
para alterar o número de documentos iterados automaticamente.
O exemplo a seguir define o tamanho do lote como 3. Futuras operações de db.collection.find()
retornarão apenas 3 documentos por iteração do cursor.
config.set( "displayBatchSize", 3 )
Para iterar manualmente sobre os resultados, atribua o cursor retornado a uma variável com a palavra-chave var
, conforme mostrado nas seções a seguir.
Com nome da variável
O exemplo a seguir usa a variável myCursor
para iterar sobre o cursor e imprimir os documentos correspondentes:
var myCursor = db.bios.find( ); myCursor
Com o método next()
O exemplo a seguir utiliza o método do cursor next()
para acessar os documentos:
var myCursor = db.bios.find( ); var myDocument = myCursor.hasNext() ? myCursor.next() : null; if (myDocument) { var myName = myDocument.name; print (tojson(myName)); }
Para imprimir, você também pode utilizar o método printjson()
em vez de print(tojson())
:
if (myDocument) { var myName = myDocument.name; printjson(myName); }
Com o método forEach()
O exemplo a seguir usa o método de cursor forEach()
para iterar o cursor e acessar os documentos:
var myCursor = db.bios.find( ); myCursor.forEach(printjson);
Modificar o comportamento do cursor
mongosh
e os drivers fornecem vários métodos de cursor que ligam no cursor retornado pelo método find()
para modificar seu comportamento.
Ordene documentos no conjunto de resultados
O método sort()
ordena os documentos no conjunto de resultados. A operação a seguir retorna documentos na coleção bios classificados em ordem crescente pelo campo name
:
db.bios.find().sort( { name: 1 } )
sort()
corresponde à instrução ORDER BY
em SQL.
Limite o número de documentos a serem devolvidos
O método limit()
limita o número de documentos no conjunto de resultados. A operação a seguir retorna no máximo 5
documentos na coleção de bios:
db.bios.find().limit( 5 )
limit()
corresponde à instrução LIMIT
em SQL.
Defina o ponto inicial do conjunto de resultados
O método skip()
controla o ponto de partida do conjunto de resultados. A operação a seguir ignora os primeiros documentos 5
na coleção de bios e retorna todos os documentos restantes:
db.bios.find().skip( 5 )
Especifique o agrupamento
A colocação permite que os usuários especifiquem regras específicas do idioma para comparação de strings, como regras para letras maiúsculas e marcas de acento.
O método collation()
especifica o agrupamento para a operação db.collection.find()
.
db.bios.find( { "name.last": "hopper" } ).collation( { locale: "en_US", strength: 1 } )
Combinar métodos do cursor
As instruções a seguir encadeiam os métodos do cursorlimit()
e sort()
:
db.bios.find().sort( { name: 1 } ).limit( 5 ) db.bios.find().limit( 5 ).sort( { name: 1 } )
As duas afirmações são equivalentes; ou seja, a ordem em que você encadeia os métodoslimit()
e sort()
não é significativa. Ambas as instruções retornam os cinco primeiros documentos, conforme determinado pela ordem de classificação crescente em "nome".
Métodos do cursor mongosh
disponíveis
Usar variáveis na opção let
Você pode especificar opções de consulta para modificar o comportamento da consulta e indicar como os resultados são retornados.
Por exemplo, para definir variáveis que você pode acessar em outro lugar no método find
, utilize a opção let
. Para filtrar os resultados utilizando uma variável, você deve acessar a variável dentro do operador $expr
.
Criar uma coleção cakeFlavors
:
db.cakeFlavors.insertMany( [ { _id: 1, flavor: "chocolate" }, { _id: 2, flavor: "strawberry" }, { _id: 3, flavor: "cherry" } ] )
O exemplo a seguir define uma variável targetFlavor
em let
e usa a variável para recuperar o sabor do bolo de chocolate:
db.cakeFlavors.find( { $expr: { $eq: [ "$flavor", "$$targetFlavor" ] } }, { _id: 0 }, { let : { targetFlavor: "chocolate" } } )
Saída:
[ { flavor: 'chocolate' } ]
Recuperar Documentos para Funções Concedidas ao Usuário Atual
A partir do MongoDB 7.0, você pode usar a nova variável de sistemaUSER_ROLES
para retornar funções de usuário .
O cenário nesta section mostra users com várias roles que têm acesso limitado a documents em uma coleção que contém information sobre budget.
O cenário mostra um possível uso de USER_ROLES
. A coleção budget
contém documentos com um campo denominado allowedRoles
. Como você verá no cenário a seguir, você pode escrever queries que comparam as funções de usuário encontradas no campo allowedRoles
com as funções retornadas pela variável de sistema USER_ROLES
.
Observação
Para outro cenário de exemplo USER_ROLES
, consulte Recuperar informações médicas para funções concedidas ao usuário atual. Esse exemplo não armazena as funções de usuário nos campos do documento, como é feito no exemplo a seguir.
Para o cenário de orçamento nesta seção, execute as seguintes etapas para criar as roles, os usuários e a collection budget
:
Criar os usuários
Crie usuários nomeados John
e Jane
com os papéis exigidos. Substitua o banco de dados test
pelo nome do banco de dados.
db.createUser( { user: "John", pwd: "jn008", roles: [ { role: "Marketing", db: "test" }, { role: "Development", db: "test" }, { role: "Operations", db: "test" }, { role: "read", db: "test" } ] } ) db.createUser( { user: "Jane", pwd: "je009", roles: [ { role: "Sales", db: "test" }, { role: "Operations", db: "test" }, { role: "read", db: "test" } ] } )
Criar a coleção
Executar:
db.budget.insertMany( [ { _id: 0, allowedRoles: [ "Marketing" ], comment: "For marketing team", yearlyBudget: 15000 }, { _id: 1, allowedRoles: [ "Sales" ], comment: "For sales team", yearlyBudget: 17000, salesEventsBudget: 1000 }, { _id: 2, allowedRoles: [ "Operations" ], comment: "For operations team", yearlyBudget: 19000, cloudBudget: 12000 }, { _id: 3, allowedRoles: [ "Development" ], comment: "For development team", yearlyBudget: 27000 } ] )
Execute as seguintes etapas para recuperar os documentos acessíveis a John
:
Recuperar os documentos
Para usar uma variável do sistema, adicione $$
ao início do nome da variável. Especifique a variável de sistema USER_ROLES
como $$USER_ROLES
.
Executar:
db.budget.find( { $expr: { $not: { $eq: [ { $setIntersection: [ "$allowedRoles", "$$USER_ROLES.role" ] }, [] ] } } } )
O exemplo anterior retorna os documentos da coleção budget
que correspondem a pelo menos uma das funções que o usuário que executa o exemplo tem. Para fazer isso, o exemplo usa $setIntersection
para retornar documentos em que a interseção entre o budget
campo de documento allowedRoles
e o conjunto de funções de usuários de $$USER_ROLES
não está vazia.
Examine os documentos
John
tem as funções Marketing
, Operations
e Development
e vê estes documentos:
[ { _id: 0, allowedRoles: [ 'Marketing' ], comment: 'For marketing team', yearlyBudget: 15000 }, { _id: 2, allowedRoles: [ 'Operations' ], comment: 'For operations team', yearlyBudget: 19000, cloudBudget: 12000 }, { _id: 3, allowedRoles: [ 'Development' ], comment: 'For development team', yearlyBudget: 27000 } ]
Execute as seguintes etapas para recuperar os documentos acessíveis a Jane
:
Examine os documentos
Jane
tem as funções Sales
e Operations
e vê estes documentos:
[ { _id: 1, allowedRoles: [ 'Sales' ], comment: 'For sales team', yearlyBudget: 17000, salesEventsBudget: 1000 }, { _id: 2, allowedRoles: [ 'Operations' ], comment: 'For operations team', yearlyBudget: 19000, cloudBudget: 12000 } ]
Observação
Em um cluster fragmentado, uma query pode ser executada em um fragmento por outro nó de servidor em nome do usuário. Nestas queries, o USER_ROLES
ainda é preenchido com as funções do usuário.
Modificar uma query com opções
Os exemplos seguintes mostram como você pode utilizar o campo options
em uma query do find()
. Use o seguinte insertMany()
para configurar a collection users
:
db.users.insertMany( [ { username: "david", age: 27 }, { username: "amanda", age: 25 }, { username: "rajiv", age: 32 }, { username: "rajiv", age: 90 } ] )
limite com opções
A seguinte query limita o número de documentos no conjunto de resultados com o parâmetro de opções limit
:
db.users.find( { username : "rajiv"}, // query { age : 1 }, // projection { limit : 1 } // options )
allowDiskUse com opções
A seguinte consulta utiliza o parâmetro options
para habilitar o allowDiskUse
:
db.users.find( { username : "david" }, { age : 1 }, { allowDiskUse : true } )
explicar com opções
A seguinte query utiliza o parâmetro options
para obter a saída de explicação do executionStats
:
var cursor = db.users.find( { username: "amanda" }, { age : 1 }, { explain : "executionStats" } ) cursor.next()
Especificar várias opções em uma query
A seguinte query utiliza múltiplos options
em uma única query. Esta query usa limit
definido como 2
para retornar somente dois documentos e showRecordId
definido como true
para retornar a posição do documento no conjunto de resultados:
db.users.find( {}, { username: 1, age: 1 }, { limit: 2, showRecordId: true } )