A Voyage AI se une ao MongoDB para impulsionar aplicativos de AI mais precisos e confiáveis no Atlas.

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 .

Desenvolvedor do MongoDB
Centro de desenvolvedores do MongoDB
chevron-right
Idiomas
chevron-right
JavaScript
chevron-right

MongoDB e Node.js: Change Streams e Atlas Triggers (parte 4 de 4)

29 min • Publicado em maio 21, 2021
Node.jsMongoDBFluxos de alteraçõesJavaScript
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Vídeo
star-empty
star-empty
star-empty
star-empty
star-empty
Pesquisar
00:00:00Introdução aos Change Streams e Atlas Triggers
00:01:45Explorando Change Streams em Node.js
00:11:43usando emissores de eventos com Change Streams
00:19:58Monitorando Change Streams com hasNext
00:29:14Aproveite a API de Stream do Node
00:38:21Configurando o MongoDB Atlas Triggers
00:58:41Conclusão e envolvimento da comunidade
O foco principal do vídeo é aprender a usar os change streams do MongoDB e os Atlas Triggers to React em tempo real a alterações de banco de dados em um ambiente Node.js.
} Pontos-chave
  • Os change streams permitem o monitoramento em tempo real das alterações no banco de dados.
  • Atlas Triggers no MongoDB Atlas pode executar funções com base em eventos do banco de dados ou intervalos programados.
  • O vídeo demonstra quatro métodos para trabalhar com change streams no Node.js e no MongoDB Atlas.
  • Os pipelines de agregação podem ser usados para filtrar e transformar eventos de fluxo de mudança.
  • MongoDB Atlas lida com o gerenciamento de servidor para os Atlas Triggers, simplificando o processo para os desenvolvedores.
Todos os vídeos do MongoDB

Transcrição completa do vídeo
às vezes, você precisa React imediatamente a alterações em seu banco de dados talvez queira fazer um pedido a um fornecedor sempre que o estoque de um item cair abaixo de um determinado limite ou talvez queira enviar um e-mail sempre que o status de um pedido mudar, independentemente de seu caso de uso sempre que você quiser React imediatamente a alterações nos fluxos de alterações do seu banco de dados e os Atlas Triggers podem ser uma opção F Começamos explicando como se conectar a um banco de dados MongoDB e, em seguida, como executar cada um dos CRUD que criam operações de atualização, leitura e exclusão depois passamos para tópicos mais avançados, como a estrutura de agregação e as transações hoje vamos cobrir os change streams e Atlas Triggers para cada um deles explico o que é e, em seguida, passo a passo de um exemplo de como usá-los vamos começar com change streams change streams permitem que você receba notificações Quando você usa change streams, pode optar por programar ações que serão executadas automaticamente sempre que ocorre um evento de alteração. Os change streams utilizam a estrutura de aggregation para que você possa optar por filtrar eventos de alteração específicos ou transformar a alterar documentos de eventos, por exemplo, digamos que eu queira ser notificado sempre que uma nova listagem no mercado sydney austrlia for adicionada à coleção de listagens e avaliações eu poderia criar um fluxo de alterações que monitore as listagens e a coleção de avaliações e usar um pipeline de agregação para corresponder nas listagens em que estou interessado hoje mostrarei três maneiras diferentes de implementar esse fluxo de alterações começarei a trabalhar em um arquivo de modelo básico esse código está estruturado de forma muito semelhante ao código que você viu nos vídeos anteriores se você tiver alguma dúvida sobre o que esse código de modelo está fazendo, volte ao primeiro vídeo da série agora que já me conectei a um dat uma base no MongoDB Atlas que tem o conjunto de dados de amostra carregado hoje continuo trabalhando no banco de dados de amostra do airbnb. script chamado Github stream quarto privado em londres e uma casa de campo bonita então vai atualizar duas dessas listas vai atualizar as visualizações da Opera Opera e uma casa de campo vai criar mais duas listas italian pool e sydney harbour repouso e então, finalmente, vai excluir uma lista e essa listagem é a listagem inicial de sydney harbour, então esse script nos fornece uma variedade de operações CRUD que podemos usar para testar nosso fluxo de alterações agora que estamos configurados, vamos explorar três maneiras diferentes de trabalhar k com um change stream no node.js, independentemente de como monitoro as alterações no change stream, gostaria de fechar o change stream depois de um determinado período de tempo, então criei uma função auxiliar para fazer exatamente isso, como você pode ver nessa função tem dois parâmetros primeiro ele tem tempo em ms que é o tempo em milissegundos após o qual o fluxo de alterações deve ser fechado o padrão é seis mil milissegundos que é um minuto o segundo param é o fluxo de alterações a ser fechado então após o período de tempo determinado a função chama o change stream dot close, que é o que realmente fechará o change stream agora que estamos prontos para começar a usar os change streams a primeira maneira de monitorar o change stream é usando a função ativada a classe de change streams do driver Node.js do MongoDB herda de nó emissor de eventos de classe interna como resultado, podemos usar emissores de eventos na função para adicionar uma função de ouvinte que seria chamada sempre que ocorresse uma alteração no fluxo de alterações se isso fosse um pouco confuso não use ry deve ficar mais claro quando eu começar a escrever código, vamos escrever uma função que monitorará as alterações no fluxo de alterações usando emissores de eventos ativados, então vamos criar uma função assíncrona chamada monitorar listas usando o emissor de eventos para parâmetros vamos usar um conectado [ __ ] cliente o tempo em milissegundos que indica por quanto tempo o change stream deve ser monitorado vamos definir esse padrão como 60 000 e um aggregation pipeline que o change stream usará agora precisamos acessar a collection que monitoraremos as alterações queremos monitorar as listagens e a collection de arrays, então diremos que const collection é igual a client.db amostra as listagens e avaliações da collection de pontos do airbnb agora estamos prontos para criar nosso fluxo de alterações diremos collection ponto watch e nós vamos para passar a observação do pipeline retornará um fluxo de alterações, então armazenaremos o que foi retornado em um constante chamado change stream assim que tivermos nosso change stream, podemos adicionar um ouvinte a ele, então direi o ponto de fluxo de alterações em que queremos para ouvir um evento de mudança e, em seguida, precisamos definir nosso ouvinte, então vamos apenas criar uma função anônima e nomear a variável a seguir e, em seguida, vamos apenas registrar a seguir realmente não estamos fazendo muito aqui, estamos apenas fazendo o registro corretamente mas é aqui que você pode fazer as coisas interessantes é aqui que você pode disparar um e-mail, fazer um pedido ou tomar qualquer ação inteligente necessária com base na alteração da coleção agora eu poderia optar por deixar o fluxo de alterações aberto indefinidamente em vez de Vamos chamar essa função auxiliar para fechar o fluxo de alterações após o período de tempo determinado, então direi para aguardar fechamento do fluxo de alterações e passo esse tempo em milissegundos e o fluxo de alterações agora que implementei função vamos tentar fazer isso eu caminho para Go para principal e chamar essa função dizendo aguardar listagens de monitoramento usando o emissor de eventos e, por enquanto, só passo o cliente e definir a hora em milissegundos para 15 000. então faltam 15 segundos deixe-me salvar este arquivo eu abri dois terminais na parte inferior do VS Code então deixe-me expandir o terminal para que possamos ver mais o terminal esquerdo é onde eu estou executando o script que abrirá o fluxo de alterações e esteja atento às alterações, então deixe-me iniciar isso o fluxo de alterações será aberto por 15 segundos no terminal direito eu estou começando a iniciar os fluxos de alterações dados de teste que criarão, atualizarão e excluirão documentos que estamos obtendo um muita saída aqui, deixe-me rolar até o topo, lembre-se de que meu código está imprimindo cada evento de alteração que recebe, então, analisando a primeira alteração, podemos ver que os dados de teste dos fluxos de alterações estão criando uma nova listagem de airbnb que o fluxo de alterações nos fornece um muitas informações sobre essa alteração no banco de dados, então vamos percorrer cada peça cada evento de alteração tem um ID de sublinhado esse ID de sublinhado pode ser usado quando você deseja retomar um fluxo de alterações e conversaremos um pouco sobre isso mais tarde, podemos ver que o tipo de operação é inserir, também podemos veja quando o evento ocorreu a seguir temos o documento completo aqui podemos ver o documento que foi inserido no banco de dados isso pode ser muito útil quando você está escrevendo código personalizado, por exemplo, talvez você esteja enviando um e-mail para notificar os usuários de novo listas de listagens nas áreas de interesse delas você pode incluir o nome e o endereço da lista no e-mail que está enviando e pode obter essas informações aqui no evento de alteração sem ter que escrever uma query separada para obter os dados em seguida temos ns, que significa namespace esse é o banco de dados e a coleção afetados pelo evento e, finalmente, temos a chave do documento esse é o ID de sublinhado do documento que foi inserido e você pode ver que a chave do documento no evento de alteração corresponde ao ID que é impresso em change streams test d se você atualizar uma das listagens, podemos ver muitas das mesmas informações que vimos para inserções, também podemos ver a descrição de atualização, que mostra quais campos foram atualizados e quais campos foram removidos se você quiser ver o documento completo e não apenas os campos atualizados você pode configurar o fluxo de alterações para incluir isso também tudo bem em seguida, vemos outra atualização em seguida, vemos mais duas inserções. Elas são bem semelhantes ao que vimos anteriormente, então continuarei rolando a última coisa que os dados de teste dos fluxos de alterações fazem é excluir um documento aqui, vemos informações semelhantes às que vimos antes do ID do evento o tipo de operação que é excluir a hora em que o evento ocorreu o espaço de nome do evento e o ID do documento que foi excluído aqui na parte inferior podemos ver que o fluxo de alterações foi fechado neste exemplo capturei e registrei todos os eventos de alteração em alguns casos você não vai se importar com todos os eventos de alteração que ocorrem em uma collection em vez disso, você vai quiser limitar as alterações que você está monitorando você pode usar um aggregation pipeline para filtrar as alterações ou transformar os documentos de eventos do fluxo de alterações então vamos voltar ao meu objetivo eu gostaria de ser notificado sempre que uma nova listagem for criada no mercado de Sydney e Austrália Vou criar um pipeline de agregação para filtrar apenas as alterações na coleção de listagens e avaliações se você não estiver familiarizado com pipelines de agregação, confira meu vídeo anterior nesta série para que eu volte ao código e passo a passo localizado, então eu direi que o endereço de ponto do documento completo do ponto de país é austrlia e vamos restringir isso um pouco mais até sydney então eu direi o endereço de ponto do documento completo que o mercado de ponto é sydney eu quiser usar esse pipeline para filtrar as alterações no campo fluxo nge eu estou passando esse pipeline para a função que cria nosso fluxo de alterações tudo bem, eu salvo essas alterações e deixe-me expandir o terminal de novo de ambos os scripts mais uma vez tudo bem desta vez temos muito menos saída deixe-me rolar até o topo da saída o primeiro evento é para uma operação do tipo inserir em sydney austrliaia e o segundo também é o segundo as outras inserções que não estavam em sydney foram filtrados automaticamente os outros eventos de alteração, como atualizações e exclusões, também foram filtrados, como você pode ver o pipeline de agregação é uma maneira realmente poderosa e fácil de filtrar e transformar seus eventos de alteração a primeira maneira como monitoramos o fluxo de alterações foi usando emissores de eventos na função vamos dar uma olhada em outra maneira de trabalhar com fluxos de alteração, podemos criar um loop enquanto que aguarda o próximo elemento no fluxo de alterações usando a próxima classe de fluxo de alterações de drivers do MongoDB node.js vamos criar uma fu nction que monitorará alterações no change stream usando change streams for o próximo passo para criar uma função assíncrona chamada monitorar listagens usando tem um cliente conectado [ __ ] um tempo em milissegundos que indica quanto tempo o fluxo de alterações deve ficar aberto e eu definirei o padrão como 60 000 e um aggregation pipeline que o fluxo de cadeia usará a primeira coisa que i que eu gostaria de fazer nesta função é acessar a collection que eu gostaria de monitorar quanto a alterações, então direi que a collection const é igual a client dot db amostra airbnb listagens de collections de pontos e avaliações agora estou pronto para criar o fluxo de alterações faço isso da mesma forma que eu fez na função anterior eu direi que o fluxo de alterações constante é igual à coleção dot watch pipeline eu poderia optar por deixar esse fluxo de alterações aberto indefinidamente em vez disso mudar o fluxo, então eu Digamos que feche o change stream e passará o tempo em milissegundos e o change stream agora vamos monitorar o change stream em busca de alterações eu criará um loop enquanto aguardará novas alterações no change stream então direi para aguardar alterar o ponto do fluxo seguinte aguardará para retornar verdadeiro até que uma nova alteração chegue ao fluxo de alterações posso obter o evento de fluxo de alterações dizendo aguardar alteração do próximo ponto do fluxo eu poderia optar por armazenar esse evento em uma variável e então poderia fazer algo realmente valorizado e interessante com esse evento, em vez disso, só o registro por enquanto. lançado eu estou verificando se o change stream está fechado se estiver fechado eu registro essas informações então direi que o change stream está fechado não esperaremos mais alterações se o change stream não estiver fechado algo inesperado aconteceu, então vamos apenas jogar t erro em agora que implementei essa função, vamos testá-la, então Go voltar ao principal e substituir essa chamada e, em vez disso, direi monitorar listagens usando has próximo e i Go a lote de saída aqui deixe-me rolar um pouco para cima tudo bem, podemos ver que estamos obtendo eventos de fluxo de alterações como fizemos antes podemos ver eventos para inserir inserir atualizar inserir atualizar inserir e excluir então parece que temos todos eles agora apenas como fez anteriormente com a última função, poderia optar por passar um pipeline para essa função a fim de filtrar os eventos deixarei isso como um exercício para você tentar por conta própria até agora abordamos duas maneiras de monitorar a mudança fluxos em node.js vamos examinar uma terceira via, vamos usar a API de fluxo do nó para usar o módulo de fluxo que nós vamos precisar carregá-lo, então até o topo do arquivo eu direi que o fluxo constante é igual a exigir fluxo bem parece bom Go criar uma função vamos tornar isso uma função assíncrona chamada monitorar listagens usando API de fluxo i' Vou ficar com os mesmos parâmetros que usei nas duas primeiras funções, então precisarei de um cliente conectado [ __ ] um tempo em milissegundos que indique por quanto tempo o fluxo de alterações deve ser monitorado como sempre i'm vão definir o padrão para 15 60 segundos e um pipeline de agregação que o fluxo de alterações usará tudo bem, vamos começar a implementar essa função assim como eu fez com outras funções criarei uma constante para a coleção de anúncios e avaliações, então direi que coleção const é igual ao cliente dot db amostra airbnb listagens e avaliações da coleção de pontos agora criarei o fluxo de cadeia da mesma forma que criei para as outras duas funções direi que o fluxo de alterações const é igual a coleção dot watch pipeline bem agora estou pronto para monitorar o c change stream, então direi alterar o stream de pontos, isso vai retornar um stream legível de nó usar o pipe do readable para extrair os dados do stream e escrevê-los no console e, assim como nas outras funções, Estou simplesmente registrando isso, mas, mais uma vez, é aqui que você pode fazer o trabalho interessante que vai gerar seu valor comercial útil. Você pode fazer muito mais aqui do que apenas registrar o evento de alteração. Vamos chamar essa função auxiliar que vai definir um temporizador e fechar o fluxo de alterações, então eu direi para aguardar o tempo de fluxo de alterações fechado em milissegundos e fluxo de alterações tudo bem, isso é tudo que precisamos fazer para essa função, vamos chamá-la para voltar até o principal, estou substituindo essa chamada pela nossa nova, então direi para aguardar as listagens de monitoramento usando API de fluxo de passar o cliente e, desta vez, ficar com o tempo padrão e o padrão pipeline vazio deixe-me salvar isso tudo bem, estou começando para limpar os terminais e depois deixar-me executá-los, como você pode ver, estamos obtendo muitas saídas aqui para todos esses eventos de fluxo de alterações posso executar change streams.testdata novamente e você pode ver que estamos obtendo ainda mais saídas agora apenas como aviso, posso optar por passar um pipeline aqui e filtrar esses eventos de alteração em algum momento seu aplicativo provavelmente perderá a conexão com o change stream talvez um evento de rede ocorra e uma conexão entre o aplicativo e o banco de dados seja descartada ou talvez seu aplicativo falhará e precisará ser reiniciado, mas você é um desenvolvedor 10x direito que isso nunca vai acontecer com você bem tudo bem prosseguir em qualquer um desses casos você pode querer retomar o fluxo de alterações de onde você parou anteriormente você não perde nenhum desses eventos de alteração cada documento de evento de fluxo de alteração contém um token de retomada o driver do node.js armazena automaticamente o token de retomada no ID de sublinhado do documento do evento de alteração e vimos que alguns minutos atrás, quando examinamos os documentos de eventos de alteração, o aplicativo pode passar o token de retomada ao criar um novo fluxo de alterações o fluxo de alterações incluirá todos os eventos que aconteceram após o evento associado ao token de retomada fornecido o driver do MongoDB node.js tentará automaticamente para restabelecer conexões no caso de erros de rede transitórios ou eleições nesses casos, o driver usará sua cópia em cache do token de retomada mais recente para que nenhum evento de fluxo de alteração seja perdido no caso de uma falha do aplicativo ou reiniciar o aplicativo precisa passar o token de retomada ao criar o fluxo de alterações para garantir que nenhum evento de fluxo de alterações seja perdido Tenha em mente que o driver perderá sua cópia em cache do token de retomada mais recente quando o aplicativo for reiniciado, portanto, seu aplicativo deve armazenar o token de retomada para mais informações e código de exemplo para retomar os fluxos de mudança confira a documentação oficial até agora que conversamos sobre diferentes maneiras de monitorar ou fluxos de alterações Os fluxos de alterações permitem que você React imediatamente a alterações em seu banco de dados agora, ao usar fluxos de alterações, você provavelmente quer garantir que seu aplicativo esteja sempre ativo e em execução para não perder nenhum desses eventos de alteração que mantêm um aplicativo ativo e a execução seguramente é possível, mas pode ser um desafio mesmo, é aqui que os Atlas Triggers do MongoDB vêm em Atlas Triggers permitem executar funções em tempo real com base em eventos do banco de dados, como fluxos de alteração ou intervalos não programados, como uma tarefa cronológica Os Atlas Triggers têm alguns grandes vantagens primeiro você não precisa se preocupar com programar o change stream você simplesmente programa a função que será executada quando o evento de banco de dados for disparado segundo você não precisa se preocupar com o gerenciamento do servidor onde seu código do change stream está sendo executado O Atlas leva cuido do gerenciamento do servidor para você e, em terceiro lugar, você obtém uma interface de usuário prática para configurar seu trigger , o que significa que você tem menos código para escrever estou começando a criar um trigger para fazer a mesma coisa que eu fazia com fluxos de alterações anteriores eu gostaria de ser alertado quando novas listagens forem criadas no mercado sydney austrlia agora, em vez de trabalhar localmente em um editor de código para criar um fluxo de alterações de monitor, eu criará um trigger na interface do usuário da web do Atlas, então estou aqui na página Atlas Triggers no Atlas e vamos clicar em adicionar trigger , posso optar por criar um trigger de banco de dados ou um trigger agendado, continuarei com o trigger de banco de dados Vou nomear essa nova listagem de trigger em sydney, deixarei o trigger ativado e a ordenação de eventos ativada também na caixa de seleção de fontes de dados de link escolherei o cluster 0, que é onde meu banco de dados de amostra do airbnb está armazenado, então clico no link isso levará apenas um momento, então vamos pular a milagrosidade da edição tudo bem meu cluster agora está vinculado agora estamos prontos para os detalhes da origem do trigger para o cluster, selecionarei o cluster 0. para banco de dados selecionarei amostra airbnb para nome da coleção selecionarei listagens e revisões para tipo de operação posso escolher quais operações gostaria de observar inserir à direita atualizar excluir e ou substituir eu estou selecionando inserir desejando o documento completo para esteja no evento de alteração, então eu habilitarei essa opção para o tipo de evento eu continuarei com a função esse código de função padrão inclui muitos códigos para ajudá-lo a começar eu apenas excluiria tudo isso e estou simplesmente registrando o documento, então direi console.log gostaria de obter o documento completo do ponto do evento de alteração e, em seguida, vamos redefinir isso para que ele seja impresso bem agora, exatamente como mencionei com as funções que escrevi no script de nó não estou realmente fazendo nada interessante aqui, estou apenas fazendo registros mas é aqui que você pode implementar as ações interessantes e úteis com base nos eventos de mudança eu estou começando a expandir a seção avançada quiser limitar os eventos de mudança apenas para aqueles no mercado de Sydney e Austrália, então eu eu disse que o documento completo ponto endereço ponto país é austrlia e o documento completo endereço ponto endereço ponto mercado é sydney tenha em mente que essa declaração de correspondência de dólares é igual à aggregation pipeline que passei para o change stream quando estava trabalhando no meu script node.js tudo bem, tudo isso parece bom eu vai clicar em salvar o trigger agora está ativado a partir deste ponto a função para registrar o evento de alteração será chamada sempre que um novo documento no mercado de sydney austrlia for inserido nas listagens e coleção de avaliações agora que o trigger está ativado vamos criar dados de amostra que acionarão o trigger , então voltarei ao VS Code e executarei dados de teste de change streams assim como eu fazia quando estava testando o código do change stream no script node.js agora Go voltar ao Atlas, vamos dar uma olhada nos resultados quando criei o trigger O MongoDB Atlas criou automaticamente um aplicativo de realm para me chamado Atlas Aciona o aplicativo de realm deixe-me abrir a associação de função tado com o trigger atualmente não faz muito, ele simplesmente registra os documentos de alteração, então vamos dar uma olhada nos registros aqui, podemos ver duas entradas nos registros, deixe-me expandir essas duas listas estão no mercado de Sydney, então mesmo que nosso script insira cinco documentos faz atualizações em dois documentos e, em seguida, exclui outro documento nossa função está sendo chamada apenas para as duas novas listagens em sydney perfeita Atlas Triggers oferecem muito poder e muitas possibilidades com pouquíssimo programação vamos encerrar este vídeo hoje exploramos quatro Maneiras diferentes de realizar essa mesma tarefa de reagir imediatamente a alterações em um banco de dados MongoDB mostrei três maneiras diferentes de trabalhar com fluxos de alteração em node.js usando a classe de emissor de eventos integrada do MongoDB usando o MongoDB node.js drivers change stream e usando a API de fluxo, finalmente mostrei como criar um Atlas trigger que monitorará as alterações nos quatro casos em que usamos a correspondência de dólares para filtrar o fluxo de alterações ev entes os exemplos que exploramos hoje todos fizeram coisas relativamente simples sempre que um evento foi disparado corretamente eles simplesmente registraram os eventos de mudança, mas os change streams e os Atlas Triggers se tornam realmente poderosos quando você começa a fazer mais em resposta aos eventos de mudança, por exemplo, você pode querer disparar alertas ou enviar e-mails ou fazer pedidos ou atualizar outros sistemas ou fazer 100 outras coisas incríveis certos o limite do reino se você quiser uma referência rápida do que mostrei hoje confira a série de blogs que escrevi que aborda exatamente os mesmos tópicos i também temos um repositório do Github que contém o código que Escrevi hoje, então incluí links para ambos na descrição abaixo. Infelizmente, este é o vídeo final da série de início rápido do Node.js e do MongoDB. ex., então se você tiver ideias de outros tópicos que gostaria de ver abordados ou tiver alguma dúvida sobre o que viu nesta série de vídeos, juntar-se a nós na Comunidade MongoDB eu e os meus membros da equipe estamos lá todos os dias eles estão conversando com membros da nossa comunidade de desenvolvedores eles estão fazendo perguntas que estamos respondendo a elas estamos trabalhando juntos e também estamos discutendo práticas recomendadas então vamos lá, faça parte da comunidade gostaria muito de ver você lá você

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

Como fazer semantic search no MongoDB utilizando o Atlas Vector Search


Sep 18, 2024 | 8 min read
Tutorial

Como integrar o MongoDB ao seu aplicativo Next.js


Apr 18, 2025 | 11 min read
Tutorial

Introdução ao MongoDB Atlas, NodeJS e o Azure App Service


Apr 18, 2025 | 5 min read
Tutorial

Anúncio UDF do MongoDB para modelos do BigQuery Dataflow


Apr 02, 2024 | 4 min read