Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

db.collection.find()

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Comportamento
  • Exemplos
  • Saiba mais

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:

C#Java SyncNode.jsPyMongoCC++GoJava RSKotlin CoroutineKotlin SyncPHPMongoidRustScala
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étodo find() "retorna documentos", o método está, na verdade, retornando um cursor para os documentos.

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

Importante

Este comando tem suporte limitado em clusters M0, M2 e M5 . Para obter mais informações, 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

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 filtro de consulta. Para retornar todos os campos nos documentos correspondentes, omita este parâmetro. Para obter detalhes, consulte Projeção.

documento

Opcional. Especifica mais opções para a query. Estas opções modificam o comportamento da query e a forma como os resultados são retornados. Para ver detalhes, consulte Opções.

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,

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 $ para retornar o primeiro elemento que corresponde à condição de consulta no campo de array. Se você especificar um número inteiro diferente de zero para o valor de projeção, a operação tratará o valor como true.

Não disponível para visualizações.

<field>: <array projection>

Usa os operadores de projeção de array ($elemMatch, $slice) para especificar os elementos da array a serem incluídos.

Não disponível para visualizações.

<field>: <$meta expression>

Usa a expressão do operador $meta para especificar a inclusão de per-document metadatadisponíveis .

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.

  • Se você especificar um literal não numérico e não booleano (como uma string literal ou uma array ou uma expressão de operador) para o valor de projeção, o campo será projetado com o novo valor, por exemplo:

    • { field: [ 1, 2, 3, "$someExistingField" ] }

    • { field: "New String Value" }

    • { field: { status: "Active", total: { $sum: "$existingArray" } } }

  • Para projetar um valor literal para um campo, utilize a expressão de agregação $literal; por exemplo:

    • { field: { $literal: 5 } }

    • { field: { $literal: true } }

    • { field: { $literal: { fieldWithValue0: 0, fieldWithValue1: 1 } } }

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 cursor.allowDiskUse().
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 tailable seja true.
agrupamento
Configurações de agrupamento para operação de atualização.
comment
Adiciona um $comment à consulta que aparece nos logs do analisador.
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 tailable e awaitData sejam true.
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).
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 $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 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.

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> } }

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.

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.

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.

Dica

Veja também:

Para especificar a preocupação de leitura para db.collection.find(), utilize o método cursor.readConcern().

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.

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.

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.

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.

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.

Novidades na versão 8.0.

Você pode usar as configurações de query para definir dicas de índice, definir filtros de descarte de operação e outros campos. As configurações se aplicam à forma de query em todo o cluster. O cluster mantém as configurações após o fechamento.

O otimizador de query usa as configurações da query como uma entrada adicional durante o planejamento da query, o que afeta o plano selecionado para executar a query. Você também pode usar as configurações de query para bloquear uma forma de query.

Para adicionar configurações de query e explorar exemplos, consulte setQuerySettings.

Você pode adicionar configurações de consulta para os comandos find, distinct e aggregate.

As configurações de consulta têm mais funcionalidade e são preferidas em relação aos filtros de índice obsoletos.

Para remover as configurações de query, use removeQuerySettings. Para obter as configurações de consulta, use um estágio $querySettings em um pipeline de agregação .

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.

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()
  • A seguinte operação retorna documentos na coleção bios onde _id é igual a 5:

    db.bios.find( { _id: 5 } )
  • A operação a seguir retorna documentos na coleção bios em que o campo last no documento incorporado name é 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>").

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 a 5 ou ObjectId("507c35dd8fada716c89d0013"):

    db.bios.find(
    { _id: { $in: [ 5, ObjectId("507c35dd8fada716c89d0013") ] } }
    )
  • A operação a seguir usa o operador $gt retorna todos os documentos da coleção bios onde birth é maior que new 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 campo name.last começa com a letra N (ou é "LIKE N%")

    db.bios.find(
    { "name.last": { $regex: /^N/ } }
    )

Para obter uma lista dos operadores de consulta, consulte Seletores de consulta.

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.

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.

$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 }

Os exemplos a seguir consultam o campo integrado name na coleção bios.

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"
}

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.

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 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 array contribs 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 da array contribs é 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.

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 awards contém um elemento com o campo award igual 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 awards contém pelo menos um elemento com o campo award igual a "Turing Award" e o campo year 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.

Para localizar documentos que contenham expressões regulares BSON como valores, chame find() com a opção bsonRegExp definida como true. A opção bsonRegExp permite retornar expressões regulares que não podem ser representadas como expressões regulares JavaScript.

A operação a seguir retorna documentos em uma collection chamada testbson onde o valor de um campo chamado foo é do tipo BSONRegExp :

db.testbson.find( {}, {}, { bsonRegExp: true } )
[
{
_id: ObjectId('65e8ba8a4b3c33a76e6cacca'),
foo: BSONRegExp('(?-i)AA_', 'i')
}
]

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.

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.

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 }
)

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 }
)

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 } }
)

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 }

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.

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

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);
}

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);

mongosh e os drivers fornecem vários métodos de cursor que chamam o cursor retornado pelo método find() para modificar seu comportamento.

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.

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.

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 )

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 } )

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".

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' } ]

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:

1

Executar:

db.createRole( { role: "Marketing", roles: [], privileges: [] } )
db.createRole( { role: "Sales", roles: [], privileges: [] } )
db.createRole( { role: "Development", roles: [], privileges: [] } )
db.createRole( { role: "Operations", roles: [], privileges: [] } )
2

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" }
]
} )
3

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:

1

Executar:

db.auth( "John", "jn008" )
2

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.

3

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:

1

Executar:

db.auth( "Jane", "je009" )
2

Executar:

db.budget.find( {
$expr: {
$not: {
$eq: [ { $setIntersection: [ "$allowedRoles", "$$USER_ROLES.role" ] }, [] ]
}
}
} )
3

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.

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 }
] )

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
)

A query a seguir utiliza o parâmetro options para habilitar allowDiskUse:

db.users.find(
{ username : "david" },
{ age : 1 },
{ allowDiskUse : true }
)

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()

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
}
)

Voltar

db.collection.explain