Retrieve Data
Visão geral
Você pode executar operações para recuperar dados de seu banco de dados MongoDB. Você pode executar uma operação de localizar para corresponder aos documentos em um conjunto de critérios ligando com o método find()
ou findOne()
.
Dica
Laboratório interativo
Esta página inclui um breve laboratório interativo que demonstra como recuperar dados usando o método find()
. Você pode concluir este laboratório diretamente na janela do seu navegador sem instalar o MongoDB nem um editor de código.
Para iniciar o laboratório, clique no botão Open Interactive Tutorial na parte superior da página. Para expandir o laboratório para um formato de tela inteira, clique no botão de tela inteira (⛶) no canto superior direito do painel do laboratório.
Você também pode especificar melhor as informações que a operação de localização retorna especificando parâmetros opcionais ou encadeando outros métodos, conforme mostrado nos seguintes guias:
Você também pode utilizar uma operação de aggregation para recuperar dados. Esse tipo de operação permite que você aplique um pipeline ordenado de transformações aos dados correspondentes.
Se você deseja monitorar o banco de dados para dados de entrada que correspondem a um conjunto de critérios, você pode usar a operação de relógio para ser notificado em tempo real quando dados correspondentes são inseridos.
Observação
Sua operação de query pode retornar uma referência a um cursor que contém documentos correspondentes. Para saber como examinar os dados armazenados no cursor, consulte a página Fundamentos do cursor.
Você pode usar o driver Node.js para conectar e executar operações de leitura para implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
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
Para saber mais sobre como executar operações de leitura na IU do Atlas para implantações hospedadas no MongoDB Atlas, consulte Exibir, Filtrar e Classificar Documentos.
Encontrar documentos
Você pode usar o método find()
em um objeto Collection
. O método aceita um documento de query que descreve os documentos que você deseja recuperar. Para saber mais sobre como especificar seu documento de query, consulte o guia Especificar uma query.
Dica
Nenhum critério de query
Para executar uma operação de localização que não tenha critérios de query, você pode passar uma query vazia ou omitir o documento de query nos parâmetros do método de busca.
As seguintes operações retornam todos os documentos na collection myColl
:
await myColl.find(); // no query await myColl.find({}); // empty query
Se você não passar uma query ou passar uma query vazia para o método findOne()
, a operação retornará um único documento de uma collection.
É possível especificar opções em uma operação de busca mesmo quando você passa uma query vazia. Por exemplo, o seguinte código mostra como você pode especificar uma projeção como uma opção ao executar uma operação de localizar com um parâmetro de query vazia:
const options = { projection: { _id: 0, field1: 1 }, }; const findResult = await myColl.findOne({}, options);
Se você resolver a Promise
retornada por find()
, receberá uma referência a um Cursor
com o qual poderá navegar pelos documentos correspondentes. Se você resolver a Promise
retornada por findOne()
, receberá o documento correspondente ou null
se não houver correspondências.
Exemplo
Uma pizzaria quer encontrar todas as pizzas encomendadas por Lemony Snicket ontem. Eles executam a seguinte query find()
na collection orders
:
const findResult = await orders.find({ name: "Lemony Snicket", date: { $gte: new Date(new Date().setHours(00, 00, 00)), $lt: new Date(new Date().setHours(23, 59, 59)), }, });
Após a operação retornar, a variável findResult
faz referência a Cursor
. Você pode imprimir os documentos recuperados utilizando o método forEach()
como mostrado abaixo:
await findResult.forEach(console.dir);
O resultado pode se assemelhar ao seguinte:
[ { name: "Lemony Snicket", type: "horseradish pizza", qty: 1, status: "delivered", date: ... }, { name: "Lemony Snicket", type: "coal-fired oven pizza", qty: 3, status: "canceled", date: ...}, ... ]
Consulte find() e findOne() para obter exemplos totalmente executáveis.
Agregar dados de documentos
Se quiser executar um pipeline de processamento personalizado para recuperar dados do seu banco de dados, você pode utilizar o método aggregate()
. Este método aceita expressões de aggregation para executar em sequência. Essas expressões permitem filtrar, agrupar e organizar os dados de resultado de uma collection.
Exemplo
Uma pizzaria quer executar um relatório de status on-demand para resumir os pedidos de pizza na semana passada. Eles executam a seguinte query aggregate()
na collection orders
para obter os totais para cada campo "status" distinto:
const aggregateResult = await orders.aggregate([ { $match: { date: { $gte: new Date(new Date().getTime() - 1000 * 3600 * 24 * 7), $lt: new Date(), }, }, }, { $group: { _id: "$status", count: { $sum: 1, }, }, }, ]);
Após a operação retornar, a variável aggregateResult
faz referência a Cursor
. Você pode imprimir os documentos recuperados utilizando o método forEach()
como mostrado abaixo:
await aggregateResult.forEach(console.dir);
O resultado pode se assemelhar ao seguinte:
[ { _id: 'delivering', count: 5 }, { _id: 'delivered', count: 37 }, { _id: 'created', count: 9 } ]
Consulte as páginas do manual do servidor MongoDB sobre agregação para obter mais informações sobre como criar um pipeline de agregação.
Monitorar alterações de dados
Você pode usar o método watch()
para monitorar uma collection para alterações em uma collection que correspondam a determinados critérios. Essas alterações incluem documentos inseridos, atualizados, substituídos e excluídos. Você pode passar a esse método um pipeline de comandos de aggregation que é executado sequencialmente nos dados alterados sempre que operações de gravação forem executadas na collection.
Exemplo
Uma pizzaria quer receber uma notificação sempre que um novo pedido de pizza chegar. Para fazer isso, eles criam um pipeline de aggregation para filtrar as operações de inserção e retornar campos específicos. Eles passam esse pipeline para o método watch()
chamado na collection orders
conforme mostrado abaixo:
const changeStream = orders.watch([ { $match: { operationType: "insert" } }, { $project: { "fullDocument.name": 1, "fullDocument.address": 1, }, }, ]); changeStream.on("change", change => { const { name, address } = change.fullDocument; console.log(`New order for ${name} at ${address}.`); });
Para obter um exemplo executável do método watch()
usando o driver NodeJS, consulte o exemplo de uso de change streams .