Como consultar de vários bancos de dados do MongoDB usando o MongoDB Atlas Data Federation
Avalie esse Tutorial
Você já precisou fazer queries em bancos de dados, clusters, data centers ou até mesmo combiná-los com dados armazenados em um blob do AWS S3 ? Você provavelmente não precisou fazer tudo isso de uma vez, mas suponha que você precisasse fazer pelo menos um deles em algum momento de sua carreira. Aposto também que você não sabe que isso é possível (e fácil) de fazer com o MongoDB Atlas Data Federation! Eles permitem que você configure vários sistemas MongoDB remotos e habilitem consultas federadas em todos os sistemas configurados.
O MongoDB Atlas Data Federation permite que você execute queries em muitos sistemas MongoDB, incluindo clusters, bancos de dados e até mesmo buckets do AWS S3 . Veja como o MongoDB Atlas Data Federation funciona na prática.
Nota: Neste post, demonstraremos como consultar a partir de dois bancos de dados separados. No entanto, se você quiser consultar dados de duas coleçõesseparadas que estão no mesmo banco de dados, eu pessoalmente recomendo que você use a consulta$lookup (pipeline de agregação). $lookup executa uma junção externa esquerda a uma coleção não fragmentada no mesmo banco de dados para filtrar documentos da coleção "unida" para processamento. Nesse cenário, não é necessário usar uma instância de banco de dados federado.
tl;dr: nesta postagem, guiarei você pelo processo de criação e conexão a um banco de dados virtual no MongoDB Atlas, configurando caminhos para coleções em dois bancos de dados MongoDB separados armazenados em datacenters separados e consultando dados de ambos os bancos de dados usando apenas um única query.
Para acompanhar este tutorial, você precisa:
- Crie pelo menos dois clusters M10 no MongoDB Atlas. Para esta demonstração, criei dois bancos de dados distribuídos em provedores de nuvem separados (AWS e GCP). Clique aqui para obter informações sobre como configurar um novo MongoDB Atlas cluster. ✅ Já tem uma conta AWS? O Atlas oferece suporte ao pagamento por uso por meio do AWS Marketplace (AWS MP) sem qualquer compromisso inicial - simplesmente Inscreva-se no MongoDB Atlas por meio do AWS Marketplace.
- Carregar dados de amostra em nosso Atlas cluster garante que cada banco de dados tenha sido semeado.
Primeiro, verifique se você está conectado ao MongoDB Atlas. Em seguida, selecione a opção Data Federation na navegação à esquerda.
Criar um banco de dados virtual
- Clique em “set up manually” na lista suspensa " criar novo banco de dados federado " no canto superior direito da interface do usuário.
Clique emAdicionar Fonte de Dados na página Configuração do Atlas Data Federation e selecione MongoDB Atlas. Selecione seu primeiro cluster, insira
sample_mflix
como banco de dados e theaters
como coleção. Faça isso novamente para o segundo cluster e insira sample_restaurants
como banco de dados e restaurants
como a coleção. Para este tutorial, analisaremos dados de restaurantes e alguns dados de amostra de cinemas para determinar o número de cinemas e restaurantes em cada CEP.Repita as etapas acima para conectar os dados para o outro cluster e fonte de dados.
Em seguida, arraste esses novos armazenamentos de dados para a instância do banco de dados federado e clique em Salvar. Deve ficar assim.
A próxima coisa que precisaremos fazer depois de configurar nossa instância de banco de dados federado é conectar-se a ela para que possamos começar a executar consultas em todos os nossos dados. Primeiro, clique em conectar na primeira caixa na página de visão geral da federação de dados.
Clique em Adicionar seu Endereço IP Atual. Insira seu endereço IP e uma descrição opcional e clique em Adicionar endereço IP. Na etapaCriar um usuário MongoDB da caixa de diálogo, insira um nome de usuário e uma senha para o usuário do banco de dados. (Observação: você usará esta combinação de nome de usuário e senha para acessar dados no seu cluster.)
Você pode executar suas queries da maneira que se quiser. Você pode usar o MongoDB Compass, o MongoDB Shell, conectar-se a um aplicativo ou a qualquer outra coisa que achar necessário. Para esta demonstração, executarei minhas queries usando o plug-in Code do MongoDB Visual Studio e aproveitando seu recursoPlaygrounds. Para obter mais informações sobre como usar esse plug-in, consulte esta publicação em nosso centro de desenvolvedores.
Certifique-se de que você está usando a string de conexão para sua instância do banco de dados federado e não para seus bancos de dados MongoDB individuais. Para obter a string de conexão para sua nova instância do banco de dados federado, clique no botão conectar na página de visão geral do MongoDB Atlas Data Federation . Em seguida, clique em Conectar usando MongoDB Compass. Copie esta connection string na área de transferência. Observação: Adicione a senha do usuário que você autorizou a acessar seu banco de dados virtual aqui.
Você vai colar essa connection string no plug-in do MongoDB Visual Studio Code quando adicionar uma nova conexão.
Observação: se precisar de ajuda para começar a usar o plug-in de código do MongoDB Visual Studio, não deixe de conferir minha publicação, Como usar o plug-inde código do MongoDB Visual Studio e a documentação oficial.
Você pode executar operações usando a Linguagem de Query MongoDB (MQL), que inclui a maioria, mas não todos, comandos de servidor padrão. Para saber quais operações MQL são suportadas, consulte a documentaçãode Suporte MQL .
As queries a seguir usam os caminhos que você adicionou à sua Instância do Banco de Dados Federado durante a implementação.
Para essa query, eu queria construir uma aggregation exclusiva que só pudesse ser usada se os dois conjuntos de dados de amostra fossem combinados usando query federada e o MongoDB Atlas Data Federation. Para este exemplo, executaremos uma query para determinar o número de cinemas e restaurantes em cada CEP, analisando os conjuntos de dados
sample_restaurants.restaurants
e sample_mflix.theaters
que foram inseridos acima em nossos clusters.Quero deixar claro que essas fontes de dados ainda estão sendo armazenadas em bancos de dados MongoDB diferentes em datacenters completamente diferentes, mas, aproveitando o MongoDB Atlas Data Federation, podemos consultar todos os nossos bancos de dados de uma só vez como se todos os nossos dados estivessem em um único collection! A query a seguir só é possível usando a pesquisa federada! Quão legal é isso?
1 // MongoDB Playground 2 3 // Select the database to use. VirtualDatabase0 is the default name for a MongoDB Atlas Data Federation database. If you renamed your database, be sure to put in your virtual database name here. 4 use('VirtualDatabase0'); 5 6 // We are connecting to `VirtualCollection0` since this is the default collection that MongoDB Atlas Data Federation calls your collection. If you renamed it, be sure to put in your virtual collection name here. 7 db.VirtualCollection0.aggregate([ 8 9 // In the first stage of our aggregation pipeline, we extract and normalize the dataset to only extract zip code data from our dataset. 10 { 11 '$project': { 12 'restaurant_zipcode': '$address.zipcode', 13 'theater_zipcode': '$location.address.zipcode', 14 'zipcode': { 15 '$ifNull': [ 16 '$address.zipcode', '$location.address.zipcode' 17 ] 18 } 19 } 20 }, 21 22 // In the second stage of our aggregation, we group the data based on the zip code it resides in. We also push each unique restaurant and theater into an array, so we can get a count of the number of each in the next stage. 23 // We are calculating the `total` number of theaters and restaurants by using the aggregator function on $group. This sums all the documents that share a common zip code. 24 { 25 '$group': { 26 '_id': '$zipcode', 27 'total': { 28 '$sum': 1 29 }, 30 'theaters': { 31 '$push': '$theater_zipcode' 32 }, 33 'restaurants': { 34 '$push': '$restaurant_zipcode' 35 } 36 } 37 }, 38 39 // In the third stage, we get the size or length of the `theaters` and `restaurants` array from the previous stage. This gives us our totals for each category. 40 { 41 '$project': { 42 'zipcode': '$_id', 43 'total': '$total', 44 'total_theaters': { 45 '$size': '$theaters' 46 }, 47 'total_restaurants': { 48 '$size': '$restaurants' 49 } 50 } 51 }, 52 53 // In our final stage, we sort our data in descending order so that the zip codes with the most number of restaurants and theaters are listed at the top. 54 { 55 '$sort': { 56 'total': -1 57 } 58 } 59 ])
Isso gera os códigos postais com a maioria dos teatros e restaurantes.
1 [ 2 { 3 "_id": "10003", 4 "zipcode": "10003", 5 "total": 688, 6 "total_theaters": 2, 7 "total_restaurants": 686 8 }, 9 { 10 "_id": "10019", 11 "zipcode": "10019", 12 "total": 676, 13 "total_theaters": 1, 14 "total_restaurants": 675 15 }, 16 { 17 "_id": "10036", 18 "zipcode": "10036", 19 "total": 611, 20 "total_theaters": 0, 21 "total_restaurants": 611 22 }, 23 { 24 "_id": "10012", 25 "zipcode": "10012", 26 "total": 408, 27 "total_theaters": 1, 28 "total_restaurants": 407 29 }, 30 { 31 "_id": "11354", 32 "zipcode": "11354", 33 "total": 379, 34 "total_theaters": 1, 35 "total_restaurants": 378 36 }, 37 { 38 "_id": "10017", 39 "zipcode": "10017", 40 "total": 378, 41 "total_theaters": 1, 42 "total_restaurants": 377 43 } 44 ]
Parabéns! Você acabou de configurar uma Instância de banco de dados federada que contém bancos de dados que estão sendo executados em diferentes provedores de nuvem. Em seguida, você consultou os dois bancos de dados usando o pipeline de agregação do MongoDB, aproveitando o Atlas Data Federation e as queries federadas. Isso nos permite executar consultas com mais facilidade em dados armazenados em várias implantações de banco de dados MongoDB em clusters, data centers e até mesmo em formatos diferentes, incluindo armazenamento de blobs S3.
Captura de tela da página de visão geral do MongoDB Atlas Data Federation mostrando as informações do nosso novo banco de dados virtual.
Se tiver dúvidas, acesse o site da nossa comunidade de desenvolvedores, no qual os engenheiros e a comunidade do MongoDB ajudarão você a desenvolver sua próxima grande ideia com o MongoDB.