Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
Atlaschevron-right

Oferecendo aos clientes uma visualização única quase em tempo real com um banco de dados federado

Nic Raboy8 min read • Published Mar 30, 2023 • Updated Jun 28, 2023
AtlasFederação de Dados
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Portanto, os dados em sua organização abrangem vários bancos de dados, plataformas de banco de dados e até tipos de armazenamento, mas você precisa reuni-los e entender os dados que estão dispersos. Isso é conhecido como um aplicativoSingle View e é uma necessidade comum para muitas organizações, então você não está sozinho!
Com o MongoDB Data Federation, você pode consultar, transformar e agregar facilmente seus dados de um ou mais locais, como em um MongoDB database, em buckets do AWS S3 e até mesmo em endpoints de HTTP API. Em outras palavras, com o Data Federation, você pode usar a API de query do MongoDB para trabalhar com seus dados mesmo que eles não existam no MongoDB.
Qual é o cenário em que isso pode fazer sentido?
Digamos que você esteja nos setores automotivo ou da cadeia de suprimentos. Você tem dados de clientes que podem existir no MongoDB, mas seus fornecedores de peças executam seus próprios negócios externamente ao seu. No entanto, é necessário emparelhar os dados das peças com as transações de qualquer cliente específico. Nesse cenário, talvez você queira criar consultas ou visualizações que reúnam cada uma dessas partes.
Neste tutorial, vamos ver como é rápido e fácil trabalhar com o MongoDB Data Federation para criar visualizações personalizadas que podem ajudar suas equipes de vendas e marketing.

Os pré-requisitos

Para ter sucesso com este tutorial, você deve ter o seguinte ou pelo menos uma compreensão do seguinte:
  • Uma MongoDB Atlas instância, M0 ou superior.
  • Uma fonte de dados externa, acessível em um bucket do AWS S3 ou de um endpoint HTTP.
  • Node.js 18+.
Embora você possa ter dados Go para este tutorial, vamos supor que você precise de um pouco de ajuda. Com o Node.js, podemos obter um pacote que nos permitirá gerar dados falsos. Esses dados falsos agirão como dados de nossos clientes no MongoDB Atlas. A fonte de dados externa conterá os dados de nossos fornecedores, algo que precisamos acessar, mas que, em última análise, não é nosso.
Para descer às especificidades, vamos fazer referência aos dados daCarvana porque eles estão disponíveis como um conjunto de dados na AWS. Se você quiser acompanhar exatamente, carregue esse conjunto de dados em seu contêiner AWS S3 . Você pode expor o bucket S3 ao público ou configurar o acesso específico para o MongoDB. Neste exemplo, vamos apenas expor o bucket ao público para que possamos usar o HTTP.

Entendendo o conjunto de dados Carvana no AWS S3

Se você optar por usar o conjunto de dadosCarvana disponível no AWS Marketplace, notará que resta um CSV parecido com o seguinte:
  • vechicle_id
  • stock_number
  • Ano
  • Fazer
  • Modelo
  • miles
  • cortar
  • sold_price
  • discounted_sold_price
  • partnered_dealership
  • delivery_fee
  • earliest_delivery_date
  • Sold_date
Como esse exemplo deve ajudar você a começar, muitos dos dados não são muito importantes para nós, mas o tema é. Os dados mais importantes para nós serão o vehicle_id, pois ele deve ser uma representação exclusiva de qualquer veículo em particular. Ovehicle_id será a forma como conectamos um cliente a umveículo específico.
Com os dados da Carvana em mente, podemos continuar gerando dados falsos de clientes.

Gerar dados falsos do cliente para MongoDB

Embora possamos conectar os dados do Carvana a um banco de dados federado do MongoDB e executar queries, o exemplo não é particularmente interessante até adicionarmos uma fonte de dados diferente.
Para preencher o MongoDB com dados falsos que fazem sentido e não são completamente aleatórios, vamos usar uma ferramenta intitulada mgeneratejs que pode ser instalada com o NPM.
Se você ainda não o instalou, execute o seguinte em um prompt de comando:
1npm install -g mgeneratejs
Com o gerador instalado, precisaremos elaborar um modelo de como os dados devem ficar. Você pode fazer isso diretamente na linha de comando, mas pode ser mais fácil criar um arquivo de shell para isso.
Crie um arquivogenerate_data.sh e inclua o seguinte:
1mgeneratejs '{
2 "_id": "$oid",
3 "name": "$name",
4 "location": {
5 "address": "$address",
6 "city": {
7 "$choose": {
8 "from": [ "Tracy", "Palo Alto", "San Francsico", "Los Angeles" ]
9 }
10 },
11 "state": "CA"
12 },
13 "payment_preference": {
14 "$choose": {
15 "from": ["Credit Card", "Banking", "Cash", "Bitcoin" ]
16 }
17 },
18 "transaction_history": {
19 "$array": {
20 "of": {
21 "$choose": {
22 "from": ["2270123", "2298228", "2463098", "2488480", "2183400", "2401599", "2479412", "2477865", "2296988", "2415845", "2406021", "2471438", "2284073", "2328898", "2442162", "2467207", "2388202", "2258139", "2373216", "2285237", "2383902", "2245879", "2491062", "2481293", "2410976", "2496821", "2479193", "2129703", "2434249", "2459973", "2468197", "2451166", "2451181", "2276549", "2472323", "2436171", "2475436", "2351149", "2451184", "2470487", "2475571", "2412684", "2406871", "2458189", "2450423", "2493361", "2431145", "2314101", "2229869", "2298756", "2394023", "2501380", "2431582", "2490094", "2388993", "2489033", "2506533", "2411642", "2429795", "2441783", "2377402", "2327280", "2361260", "2505412", "2253805", "2451233", "2461674", "2466434", "2287125", "2505418", "2478740", "2366998", "2171300", "2431678", "2359605", "2164278", "2366343", "2449257", "2435175", "2413261", "2368558", "2088504", "2406398", "2362833", "2393989", "2178198", "2478544", "2290107", "2441142", "2287235", "2090225", "2463293", "2458539", "2328519", "2400013", "2506801", "2454632", "2386676", "2487915", "2495358", "2353712", "2421438", "2465682", "2483923", "2449799", "2492327", "2484972", "2042273", "2446226", "2163978", "2496932", "2136162", "2449304", "2149687", "2502682", "2380738", "2493539", "2235360", "2423807", "2403760", "2483944", "2253657", "2318369", "2468266", "2435881", "2510356", "2434007", "2030813", "2478191", "2508884", "2383725", "2324734", "2477641", "2439767", "2294898", "2022930", "2129990", "2448650", "2438041", "2261312", "2418766", "2495220", "2403300", "2323337", "2417618", "2451496", "2482895", "2356295", "2189971", "2253113", "2444116", "2378270", "2431210", "2470691", "2460896", "2426935", "2503476", "2475952", "2332775", "2453908", "2432284", "2456026", "2209392", "2457841", "2066544", "2450290", "2427091", "2426772", "2312503", "2402615", "2452975", "2382964", "2396979", "2391773", "2457692", "2158784", "2434491", "2237533", "2474056", "2474203", "2450595", "2393747", "2497077", "2459487", "2494952"]
23 }
24 },
25 "number": {
26 "$integer": {
27 "min": 1,
28 "max": 3
29 }
30 },
31 "unique": true
32 }
33 }
34}
35' -n 50
Então, o que está acontecendo no modelo acima?
Pode ser mais fácil dar uma olhada em um documento completo com base no modelo acima:
1{
2 "_id": ObjectId("64062d2db97b8ab3a8f20f8d"),
3 "name": "Amanda Vega",
4 "location": {
5 "address": "1509 Fuvzu Circle",
6 "city": "Tracy",
7 "state": "CA"
8 },
9 "payment_preference": "Credit Card",
10 "transaction_history": [
11 "2323337"
12 ]
13}
O script criará 50 documentos. Muitos dos campos serão gerados aleatoriamente, com exceção dos camposcity, payment_preference e transaction_history. Embora esses campos sejam um tanto aleatórios, estamos colocando-os em uma área restrita para um conjunto específico de opções.
Os clientes precisam estar vinculados a veículos reais encontrados nos dados da Carvana. O script adiciona um a três valores de ID reais a cada documento. Para restringir o escopo, acreditaremos que os clientes estão bloqueados a determinadas regiões.
Importe a saída para o MongoDB. Você pode considerar a criação de um banco de dados decarvana e uma coleção declientes no MongoDB para que esses dados existam.

Criar um banco de dados federado com múltiplas fontes de dados no MongoDB Atlas

É hora da parte chata! Precisamos criar um banco de dados federado para combinar os dados do cliente que já estão no MongoDB e os dados da Carvana que estão no Amazon Web Services S3.
No MongoDB Atlas, clique na guiaData Federation (Federação de dados ).
Bancos de dados federados do MongoDB Atlas
Clique em “set up manually” na lista suspensa " criar novo banco de dados federado " no canto superior direito da interface do usuário.
Em seguida, adicione suas fontes de dados. Se a fonte de dados Carvana vem diretamente de uma integração do Amazon Web Services S3 ou de um endpoint HTTP público, depende de você. O resultado final será o mesmo.
Configuração do Banco de Dados Federado do MongoDB Atlas
Configuração do Banco de Dados Federado do MongoDB Atlas
Com as fontes de dados disponíveis, crie um banco de dados dentro de sua instância federada. Como o tema deste exemplo é Carvana, pode fazer sentido criar um banco de dados decarvana e dar a cada fonte de dados um nome de coleção adequado. Os dados que residem no Amazon Web Services S3 podem ser chamados de vendas ou transações, e os dados do cliente podem ter um nome decliente.
O que você nomeia depende de você. Ao se conectar a essa instância federada, você verá apenas o nome do banco de dados federado e os nomes das coleções federadas. Observando, você não notará nenhuma diferença ao se conectar a qualquer outra instância do MongoDB.
Você pode se conectar à sua instância federada usando a connection string fornecida. Ela será semelhante a uma connection string padrão do MongoDB Atlas.
Federação de dados no MongoDB Compass
Federação de dados no MongoDB Compass
A imagem acima foi capturada com MongoDB Compass. Observe que a collection é os dados do Carvana no AWS S3 e se parece com qualquer outro documento do MongoDB?

Crie um único relatório de visualização com um pipeline de agregação do MongoDB

É ótimo ter todas as fontes de dados acessíveis a partir de um local com o Data Federation, mas podemos fazer melhor fornecendo aos usuários uma única visualização que possa fazer sentido para suas necessidades de relatórios.
Um pouco de imagens serão usadas para este exemplo, mas digamos que queremos um relatório que mostre a quantidade de tipos de carros vendidos em cada cidade. Para isso, precisaremos de dados tanto da collection dosclientes quanto da collectioncarvana.
Vamos dar uma olhada no seguinte pipeline de agregação:
1[
2 {
3 "$lookup": {
4 "from": "sales",
5 "localField": "transaction_history",
6 "foreignField": "vehicle_id",
7 "as": "transaction_history"
8 }
9 },
10 {
11 "$unwind": {
12 "path": "$transaction_history"
13 }
14 },
15 {
16 "$group": {
17 "_id": {
18 "city": "$location.city",
19 "vehicle": "$transaction_history.make"
20 },
21 "total_transactions": {
22 "$sum": 1
23 }
24 }
25 },
26 {
27 "$project": {
28 "_id": 0,
29 "city": "$_id.city",
30 "vehicle": "$_id.vehicle",
31 "total_transactions": 1
32 }
33 }
34]
Existem quatro estágios no pipeline acima.
No primeiro estágio, queremos expandir os valores de ID do veículo encontrados nos documentosdos clientes. Os valores de referência não são particularmente úteis para nós de forma autônoma, portanto, fazemos uma operação de união usando o operador$lookup entre coleções. Isso nos deixa com todos os detalhes de cada veículo junto com as informações do cliente.
O próximo estágio nivela a array de informações do veículo usando a operação$unwind. Ao final disso, todos os resultados são planos e não estamos mais trabalhando com arrays.
No terceiro estágio agrupamos os dados. Neste exemplo, estamos agrupando os dados com base na cidade e no tipo de veículo e contando quantas dessas transações ocorreram. Ao final dessa etapa, os resultados podem ter a seguinte aparência:
1{
2 "_id": {
3 "city": "Tracy",
4 "vehicle": "Honda"
5 },
6 "total_transactions": 4
7}
No estágio final, formatamos os dados em algo um pouco mais atraente usando uma operação$project. Isso nos deixa com dados que se parecem com os seguintes:
1[
2 {
3 "city": "Tracy",
4 "vehicle": "Honda",
5 "total_transactions": 4
6 },
7 {
8 "city": "Tracy",
9 "vehicle": "Toyota",
10 "total_transactions": 12
11 }
12]
Os dados podem ser manipulados da maneira que quisermos, mas para alguém que esteja fazendo um relatório sobre a cidade que mais vende um determinado tipo de veículo, isso pode ser útil.
O pipeline de agregação acima pode ser usado no MongoDB Compass e seria quase idêntico se usasse vários drivers do MongoDB, como Node.js e Python. Para ter uma ideia de como seria em outra linguagem, aqui está um exemplo de Java:
1Arrays.asList(new Document("$lookup",
2 new Document("from", "sales")
3 .append("localField", "transaction_history")
4 .append("foreignField", "vehicle_id")
5 .append("as", "transaction_history")),
6 new Document("$unwind", "$transaction_history"),
7 new Document("$group",
8 new Document("_id",
9 new Document("city", "$location.city")
10 .append("vehicle", "$transaction_history.make"))
11 .append("total_transactions",
12 new Document("$sum", 1L))),
13 new Document("$project",
14 new Document("_id", 0L)
15 .append("city", "$_id.city")
16 .append("vehicle", "$_id.vehicle")
17 .append("total_transactions", 1L)))
Ao usar o MongoDB Compass, os pipelines de agregação podem ser gerados automaticamente para qualquer idioma de driver suportado que você desejar.
A pessoa que gera o relatório provavelmente não vai querer lidar com pipelines de agregação ou código de aplicativo. Em vez disso, eles vão querer olhar para uma visualização que está sempre atualizada quase em tempo real.
No painel do MongoDB Atlas, volte para a área de configuração da sua instância federada. Você desejará criar uma exibição, semelhante à forma como criou um banco de dados federado e uma coleção federada.
Visualização do Banco de Dados Federado do MongoDB Atlas
Visualização do Banco de Dados Federado do MongoDB Atlas
Dê um nome à exibição e cole o pipeline de agregação na caixa quando solicitado.
Atualize o MongoDB Compass ou qualquer ferramenta que você esteja usando e deverá ver a visualização. Quando você carregar a visualização, ela deverá mostrar seus dados como se você executasse um pipeline — no entanto, desta vez sem executar nada.
Em outras palavras, você interagiria com a visualização como faria com qualquer outra collection — sem queries ou aggregations para executar ou acompanhar constantemente.
A visualização é mantida automaticamente atualizada nos bastidores, usando o pipeline que você usou para criá-la.

Conclusão

Com o MongoDB Data Federation, você pode combinar dados de várias fontes de dados e interagir com eles usando queries e aggregation pipelines padrão do MongoDB. Isso permite que você crie visualizações e execute relatórios quase em tempo real, independentemente de onde seus dados possam estar.
Tem uma pergunta sobre Data Federation ou agregações? Confira os MongoDB Community e saiba como outros os estão usando.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Tutorial: crie um mecanismo de pesquisa de filmes usando a pesquisa de texto completo do Atlas em 10 Minutos


Sep 09, 2024 | 10 min read
Início rápido

Início rápido 2: pesquisa vetorial com MongoDB e OpenAI


May 06, 2024 | 12 min read
Artigo

Otimizando seu arquivo online para desempenho de query


Jan 23, 2024 | 3 min read
Início rápido

Guia de início rápido para aplicativos RAG usando LangChain e LlamaIndex


Sep 18, 2024 | 10 min read
Sumário