MongoDB queries: Como fazer consultas de dados
Ao realizar consultas (queries) no MongoDB, você conseguirá encontrar e analisar dados de forma rápida e eficaz. A estrutura lógica desse método permite a utilização de inúmeros parâmetros para especificar solicitações, o que configura sua grande vantagem. Não perca tempo e aprenda a consultar dados com o nosso tutorial MongoDB queries.
MongoDB queries para realizar consultas
Como um sistema NoSQL baseado em documentos, o MongoDB permite que você armazene e gerencie grandes volumes de dados, de diversos tipos, de uma forma bastante simples. Esse sistema de gerenciamento de banco de dados (DBMS) é querido e popular justamente por sua flexibilidade e pela facilidade que ele tem de se expandir horizontalmente.
Diferentemente do que ocorre em bancos de dados relacionais, no MongoDB os dados são armazenados em documentos BSON (JSON binário) e agrupados em coleções. Assim, para que funcione de verdade, a solução deve oferecer mecanismos de consulta poderosos, capazes de filtrar as informações armazenadas e apresentar somente as realmente necessárias. Ao realizar MongoDB queries, você consegue consultar até mesmo coleções amplamente ramificadas, obtendo as informações que deseja.
Quer trabalhar com o MongoDB, mas tem dificuldade de mexer com o shell? Conheça o MongoDB Compass, a interface gráfica de usuário gratuita desse sistema de banco de dados.
O que são consultas?
Consultas nada mais são que pesquisas estruturadas de dados complexos. Elas seguem regras lógicas e funcionam como outros filtros conhecidos, como filtros de sites. No MongoDB, queries permitem que você execute buscas precisas para obter os melhores resultados possíveis, especialmente porque a solução armazena diferentes tipos de dados em seus bancos. Se não oferecesse uma poderosa ferramenta de consulta, o MongoDB não seria um sistema de gerenciamento tão popular. Para aprender a realizar consultas no MongoDB, siga as nossas instruções.
Pré-requisitos para realizar consultas no MongoDB
Para usar o método MongoDB queries, você terá de se atentar a alguns requisitos básicos:
- Primeiramente, o MongoDB deve estar instalado no seu computador. Seus bancos de dados são compatíveis com diferentes sistemas operacionais, então, para fins deste tutorial, não interessa se você usa Linux, OS X ou Windows, já que o passo a passo após a instalação é o mesmo em todos os sistemas, pois são executados dentro do sistema de banco de dados. Aprenda a instalar e mexer na solução com o tutorial introdutório ao MongoDB do nosso Digital Guide.
- Você também precisará de direitos administrativos para realizar consultas no MongoDB.
- Recomendamos que você crie um ambiente de teste inicialmente, para que possa testar o método sem colocar seus bancos de dados em risco.
Assim que cumprir os pré-requisitos, você já poderá começar a consultar.
Criar coleção de teste
Abra o terminal e faça login no MongoDB com as suas credenciais de administrador. Em seguida, crie uma nova coleção, que servirá como ambiente de teste para as suas primeiras consultas. Como o método não considera somente documentos simples, mas também arrays, diferentes campos e documentos incorporados, criaremos uma coleção de exemplo um pouco mais complexa, capaz de demonstrar as vastas possibilidades do método MongoDB queries.
No nosso exemplo, elaboramos uma lista de clientes com os seguintes dados:
{
"name" : "Schulz",
"units" : 642,
"location" : [ "Germany", "Austria" ],
"transactions" : {
"first" : {
"year" : 2017,
},
"last" : {
"year" : 2023,
},
"total" : 14
}
}
shellMais especificamente, os dados fazem referência a:
- name: O nome do da empresa que adquiriu nossos produtos.
- units: O número total de produtos comprados pela empresa.
- location: O endereço da empresa. Caso haja várias filiais, elas podem ser armazenadas como um array.
- transactions: Esse campo contém documentos incorporados (embedded documents ou nested documents). Cada um desses documentos corresponde a uma transação, contendo informações sobre a primeira compra (“first”), sobre a última compra (“last”) e sobre o total de compras realizadas (“total”).
No exemplo, incorporamos documentos para que mais informações possam ser adicionadas posteriormente, a fim de mantermos a organização dos dados.
Criar coleção de teste para realizar consultas
Agora, criaremos uma nova coleção de teste, que daremos o nome de “clients”. Para que o exemplo fique mais claro, adicionaremos somente cinco entradas à coleção. Contudo, ao trabalhar com o MongoDB, você terá toda a liberdade de criar coleções bem mais extensas. Para criarmos a coleção que desejamos, usaremos o método insertMany:
db.clients.insertMany ( [
{
"name" : "Schulz",
"units" : 642,
"location" : [ "Germany", "Austria" ],
"transactions" : {
"first" : {
"year" : 2017,
},
"last" : {
"year" : 2023,
},
"total" : 14
}
},
{
"name" : "ATS",
"units" : 17,
"location" : "France",
"transactions" : {
"first" : {
"year" : 2021,
},
"last" : {
"year" : 2022,
},
"total" : 2,
}
},
{
"name" : "Meyer",
"units" : 814,
"location" : [ "Austria", "Germany" ],
"transactions" : {
"first" : {
"year" : 2016,
},
"last" : {
"year" : 2023,
},
"total" : 22,
}
},
{
"name" : "Jones",
"units" : 313,
"location" : [ "Germany", "United States" ],
"transactions" : {
"first" : {
"year" : 2017,
},
"last" : {
"year" : 2020,
},
"total" : 9,
}
},
{
"name" : "Lopes",
"units" : 7,
"location" : "Paraguai",
"transactions" : {
"first" : {
"year" : 2022,
},
"last" : {
"year" : 2023,
},
"total" : 2,
}
}
] )
shellSe você executar o código com as entradas acima, receberá, como resultado, uma lista contendo os IDs dos objetos associados. Estes valores são exclusivos e sempre fazem referência a um único documento. Para garantir que todos os documentos sejam transferidos para a coleção que deseja, você pode fazer uso do método MongoDB find, seguido de parâmetros adicionais:
db.clients.find ( )
shellA saída corresponderá a uma lista contendo todos os IDs de objetos com os documentos completos. Consulte-a com o MongoDB queries.
Consultar campos específicos com o MongoDB queries
O resultado exibido pelo exemplo anterior já prova a importância do método MongoDB queries. Mesmo neste nosso pequeno exemplo, a saída produzida apresentou longas cadeias de caracteres, o que dificultaria a análise desses dados. Assim, adotaremos o método find para melhor especificarmos a nossa consulta. Para tanto, estabeleceremos um requisito específico, que deve ser cumprido pelo documento de saída. No exemplo a seguir, buscamos por todos os documentos com o nome “ATS”:
db.clients.find (
{ "name" : "ATS" }
)
shellUma consulta simples como essa é capaz de realizar buscas em todos os documentos armazenados na coleção que indica, para encontrar aqueles que possuem o valor “ATS”. Como este valor está presente em somente uma entrada da coleção, a seguinte saída foi apresentada:
db.clients.find ( { "name" : "ATS" } )
{
"_id" : ObjectID ( "673d14684o75iftbb0ct5003" ),
"name" : "ATS",
"units" : 17,
"location" : "France",
"transactions" : {
"first" : {
"year" : 2021,
},
"last" : {
"year" : 2022,
},
"total" : 2
}
shellO caminho oposto também funcionaria: para obtermos todos os resultados, exceto a entrada que corresponde ao valor “ATS”, bastaria que inseríssemos a seguinte entrada (ela exibirá um resultado bastante extenso):
db.clientes.find (
{ "name" : { $ne : "ATS" } }
)
shellSe você quiser, contudo, executar consultas no MongoDB com valores diferentes, terá de usar um array. No nosso exemplo, solicitamos que os clientes “ATS” e “Lopes” fossem considerados:
db.clients.find (
{ "name" : [ $in : [ "ATS", "Lopes" ] } }
)
shellConsultar vários campos com o MongoDB queries
Quando você desejar obter resultados realmente precisos, deverá especificar melhor a sua consulta. Insira parâmetros adicionais ao método MongoDB queries para uma maior precisão. No exemplo, se além do valor “ATS”, que corresponde ao nome da empresa, especificarmos um valor para “units”, o documento resultante será aquele que contiver ambos os valores:
db.clients.find (
{ "name" : "ATS", "units" : 17 }
)
shellEsse resultado é, mais uma vez, uma correspondência exata. No entanto, se um dos dois valores não estivesse correto, nenhum resultado seria retornado. A seguinte entrada, por exemplo, não obteria sucesso:
db.clients.find (
{ "name" : "ATS", "units" : 25 }
)
shellSe, ao considerar diferentes valores em uma consulta, você desejar obter não somente os resultados que atendam a todas as condições, mas também os que atendem a somente uma delas, proceda da seguinte forma:
db.clients.find (
{ $or : [ {"name" : "ATS"}, { "units" : 25 } ] }
)
shellConsultar valores em arrays com o MongoDB queries
O MongoDB queries também consulta valores em arrays. No nosso exemplo, que contém empresas com filiais em vários países, desejamos obter os clientes que possuem pelo menos uma filial na Alemanha. Para tanto, executamos a seguinte consulta:
db.clients.find (
{ "location" : "Germany" }
)
shellA saída inclui os três clientes que têm pelo menos uma filial na Alemanha. Para expandir a consulta e obter os clientes com filiais na Alemanha e na Áustria, por exemplo, organizamos um array:
db.clients.find (
{ "location" : [ "Germany", "Austria" ] }
)
shellNote, contudo, que essa entrada exibe somente um resultado, embora, teoricamente, duas empresas atendam aos critérios de busca. O motivo para que isso ocorra é o seguinte: consultas no MongoDB consideram entradas exatas e, portanto, levam em conta a ordem das informações. Para considerar valores presentes em qualquer local de um array, complemente a consulta da seguinte maneira:
db.clients.find (
{ "location" : { $all : [ "Germany", "Austria" ] } }
)
shellMongoDB queries em documentos incorporados
Nosso exemplo de coleção também contém documentos incorporados, que podem ser igualmente consultados com o método MongoDB queries. Para fazer isso, você deverá incluir um ponto na entrada, que sinalizará ao MongoDB que os campos de um documento incorporado também devem ser analisados. Para listar todos os clientes que realizaram mais de 10 transações, por exemplo, executamos o seguinte código:
db.clients.find (
{ "transactions.total" : { $gt : 10 } }
)
shellO MongoDB acessará o documento “transactions” e considerará o número total de transações (“total”).
MongoDB queries para limitar resultados
Resultados de consultas, no MongoDB, costumam ser bastante extensos, mesmo com a utilização de métodos de especificação. Assim, pode ser útil que você aprenda a limitar saídas a apenas alguns campos. Para fazer isso, utilize projeções. Elas podem conter os valores 1 (incluir campos) e 0 (excluir campos). No exemplo abaixo, realizamos uma consulta em duas partes. Primeiramente, iniciamos uma busca sem parâmetros, para a inclusão de todas as informações. Em seguida, ordenamos a realização de uma projeção para considerar apenas o campo do nome.
db.clients.find (
{ }
{ "name" : 1 }
)
shellDessa forma, obtivemos todos os resultados compatíveis limitando as saídas aos nomes correspondentes.
Cursores para otimizar resultados
Faça uso de cursores para melhor organizar a apresentação dos resultados das suas consultas. Eles permitem, entre outras coisas, limitar o número de saídas e alterar a ordem delas. Para exibir apenas dois dos resultados encontrados, por exemplo, adotamos o método limit. Ele funciona assim:
db.clients.find (
{ }
{ "name" : 1 }
).limit ( 2 )
shellCom a seguinte especificação, você ordenará a exibição dos resultados, solicitando que somente os três clientes com o menor número de pedidos sejam exibidos:
db.clients.find (
{ }
{ "name" : 1 }
).limit ( 2 ) .sort ( { "units" : 1 } )
shellPara encontrar um documento específico no seu banco de dados de forma mais direcionada, adote o método MongoDB findOne. Aprenda a usá-lo com o nosso artigo especializado.