MongoDB com drivers
Esta página documenta um método mongosh. Para ver o método equivalente em um driver MongoDB, consulte a página correspondente da sua linguagem de programação:
Definição
db.collection.find(query, projection, options)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 de query. Quando o métodofind()"retorna documentos", o método está, na verdade, retornando um cursor para os documentos.
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
Sintaxe
O método find() tem o seguinte formato:
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
Para manter a consistência da projeção dos elementos find() e findAndModify() com o estágio $project da agregação,
A projeção
find()efindAndModify()pode aceitar expressões de agregação 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 |
|---|---|
| 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 |
| Especifica a exclusão de um campo. |
| Usa o operador de projeção de array Não disponível para visualizações. |
| Usa os operadores de projeção de array ( Não disponível para visualizações. |
| Usa a expressão do operador Não disponível para visualizações. |
| 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.
|
Opções
Opção | Descrição |
|---|---|
allowDiskUse | Se pipelines que exigem mais de 100 megabytes de memória para executar a gravação em arquivos temporários no disco. Para ver os detalhes, consulte |
allowPartialResults | No caso das queries em uma coleção fragmentada, permite que o comando (ou comandos getMore subsequentes) 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 persistente de espera (tailable-await cursor) Requer que |
agrupamento | Configurações de agrupamento para operação de atualização. |
comment | Adiciona um |
explicar | Adiciona uma saída de explicação com base no modo de verbosidade fornecido. |
dica | Força o otimizador de consultas a usar índices específicos na query. |
limit | 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 persistente. Requer que |
maxTimeMS | O máximo 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 ou não atingir o tempo limite do cursor após um período de inatividade (por padrão, 10 minutos). |
projeção | Especifica os campos a serem retornados nos documentos que correspondem ao query filter. Você pode especificar a projeção de duas maneiras para
Se você especificar ambos os parâmetros, o parâmetro |
readConcern | Especifica o nível de preocupação de leitura para a query. |
readPreference | Especifica o nível de preferência de leitura da query. |
returnKey | Se apenas as chaves do índice são retornadas para uma query. |
showRecordId | Se o campo |
ignorar | Quantos documentos devem ser ignorados antes de retornar o primeiro documento no conjunto de resultados. |
sort | A ordem dos documentos retornados no conjunto de resultados. Os campos especificados na classificação devem ter um índice. |
persistente | Indica se o cursor é persistente. Os cursores persistentes permanecem abertos após o esgotamento dos resultados iniciais da query. Cursores persistentes só estão disponíveis nas 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>formato 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.
Classificação
Quando uma operação classifica e projeta com os mesmos campos, o MongoDB classifica nos valores de campo originais antes de aplicar a projeção. Para obter mais informações sobre a ordem de operação, consulte find() Ordem de operações.
Manuseio do cursor
A execução de db.collection.find() em mongosh itera automaticamente o cursor para exibir até os primeiros 20 documentos. 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(), utilize 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 MongoDB e mongosh associam todas as operações a uma sessão do servidor, com exceção das operações de gravação não reconhecidas. No caso das operações não associadas explicitamente a uma sessão (ou seja, usando Mongo.startSession()), os drivers 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
getMoredentro da transação.Para cursores criados em uma transação, não é possível chamar
getMorefora 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
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 da 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
lastno 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
$inpara retornar documentos na coleção bios em que_idé igual a5ouObjectId("507c35dd8fada716c89d0013"):db.bios.find( { _id: { $in: [ 5, ObjectId("507c35dd8fada716c89d0013") ] } } ) A operação a seguir usa o operador
$gtretorna todos os documentos da coleçãobiosondebirthé maior quenew Date('1950-01-01'):db.bios.find( { birth: { $gt: new Date('1950-01-01') } } ) A operação a seguir usa o operador
$regexpara retornar documentos na coleção bios em que o camponame.lastcomeça com a letraN(ou é"LIKE N%")db.bios.find( { "name.last": { $regex: /^N/ } } )
Para obter uma lista dos operadores de query, consulte Predicados de query.
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 query, consulte Predicados de query.
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 query, consulte Predicados de query.
Comparar dois campos de um único documento
$expr pode conter expressões que comparam campos do mesmo documento.
Crie uma coleção monthlyBudget com estes documentos:
db.monthlyBudget.insertMany( [ { _id : 1, category : "food", budget : 400, spent : 450 }, { _id : 2, category : "drinks", budget : 100, spent : 150 }, { _id : 3, category : "clothes", budget : 100, spent : 50 }, { _id : 4, category : "misc", budget : 500, spent : 300 }, { _id : 5, category : "travel", budget : 200, spent : 650 } ] )
A operação a seguir usa $expr para localizar documentos em que o valor spent excede budget:
db.monthlyBudget.find( { $expr: { $gt: [ "$spent" , "$budget" ] } } )
Saída:
{ _id : 1, category : "food", budget : 400, spent : 450 } { _id : 2, category : "drinks", budget : 100, spent : 150 } { _id : 5, category : "travel", budget : 200, spent : 650 }
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 na array contribs na coleção bios.
A operação a seguir retorna documentos na coleção bios em que o campo array
contribsconté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
contribscontém o elemento"ALGOL"ou"Lisp":db.bios.find( { contribs: { $in: [ "ALGOL", "Lisp" ]} } ) A operação a seguir usa o operador de consulta
$allpara retornar documentos na coleção bios onde o campo arraycontribsconté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
$sizepara retornar documentos na coleção bios onde o tamanho da 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 query específicos de array, consulte Operadores de predicado de query de array.
Consultas em array de documentos
Os exemplos a seguir fazem consulta na array awards na coleção bios.
A operação a seguir retorna documentos na coleção bios em que a array
awardscontém um elemento com o campoawardigual a"Turing Award":db.bios.find( { "awards.award": "Turing Award" } ) A operação a seguir retorna documentos na coleção bios em que a array
awardscontém pelo menos um elemento com o campoawardigual a"Turing Award"e o campoyearmaior que 1980:db.bios.find( { awards: { $elemMatch: { award: "Turing Award", year: { $gt: 1980 } } } } ) Use o operador
$elemMatchpara 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 query específicos de array, consulte Operadores de predicado de query de array.
Projeções
O parâmetro projeção define os campos a retornar. O parâmetro contém especificações de inclusão ou exclusão, 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 } )
Exclui 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 na 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 agregação 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 }
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 utilizando a palavra-chave var, o cursor será automaticamente iterado para acessar até os primeiros 20 documentos que corresponderem à consulta. 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 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 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 chamam o 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 de 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 coleção 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 query a seguir 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 query a seguir utiliza o parâmetro options para habilitar allowDiskUse:
db.users.find( { username : "david" }, { age : 1 }, { allowDiskUse : true } )
explicar com opções
A consulta a seguir usa o parâmetro options para obter a saída de explicação executionStats:
var cursor = db.users.find( { username: "amanda" }, { age : 1 }, { explain : "executionStats" } ) cursor.next()
Especifique várias opções em uma query
A seguinte query usa múltiplos options em uma única query. Essa query usa limit definida como 2 para retornar apenas dois documentos e showRecordId definida como true para retornar a posição do documento no conjunto de resultados:
db.users.find( {}, { username: 1, age: 1 }, { limit: 2, showRecordId: true } )