Tutorial: Crie um Atlas Search reverso em seu aplicativo usando o Atlas Triggers e o Atlas Search
Nesta página
- Pré-requisitos
- Crie um novo aplicativo modelo
- Adicione uma caixa de alerta
- Crie o componente da caixa de alerta
- Atualize a visualização principal
- Armazene os termos de alerta no Atlas
- Criar uma nova coleção
- Habilite acesso à coleção
- Grave na coleção
- Executar e Testar o Aplicativo
- Adicione um trigger
- criar um índice do atlas search
- Adicione um trigger de banco de dados
- Defina uma função do Atlas
- Executar e Testar o Aplicativo
- O que vem a seguir?
Tempo estimado para conclusão: 30 minutos
Você pode usar o Atlas App Services com Atlas Triggers e Atlas Search para criar recursos, como pesquisa reversa, na parte superior de seus aplicativos. A pesquisa reversa permite armazenar parâmetros de pesquisa e, em seguida, combinar novos documentos a esses parâmetros.
Neste tutorial, você começa com um aplicativo móvel TypeScript criado previamente que inclui uma aplicação React Native (frontend) e seus arquivos de configuração do App Services App correspondentes (backend). Esse aplicativo modelo é um aplicativo básico de lista de tarefas que permite que os usuários façam várias coisas para gerenciar suas tarefas. Para saber mais sobre o aplicativo modelo, consulte o Tutorial: Atlas Device Sync para React Native.
Depois de executar o aplicativo-modelo, você vai criar uma nova função de alerta que responde quando os usuários criam tarefas que contenham certas palavras ou frases. Este recurso mostra como você pode implementar a pesquisa reversa em seu aplicativo de produção. Use o Atlas para salvar termos específicos e receber alertas sobre eles. Depois, associe novas tarefas a esses termos utilizando os recursos do Atlas Triggers e do Atlas Search
O recurso inclui:
Uma caixa de alerta usando o Realm React SDK e @realm/React que:
Permite que você defina os termos para receber alertas.
Armazena os termos definidos no Atlas.
Um trigger de banco de dados com uma Atlas Function personalizada que:
Alerta sempre que uma nova tarefa contém um termo definido.
Agrega e retorna tarefas relacionadas usando uma consulta do Atlas Search.
Por exemplo, se quiser saber quando os usuários enviam uma tarefa sensível ao tempo, você pode inserir um termo como urgent
. Em seguida, quando um usuário adicionar uma tarefa que contém o termo, como Urgent: complete this task
, você será alertado imediatamente.
Pré-requisitos
Antes de começar:
Você deve configurar seu ambiente local para o desenvolvimento do React Native. Para obter instruções detalhadas, consulte Configure o ambiente de desenvolvimento na documentação do React Native.
Este tutorial começa com um aplicativo de modelo. Você precisa de uma conta do Atlas, de uma chave de API e do App Services CLI para criar um aplicativo modelo.
Você pode aprender mais sobre a criação de uma conta do Atlas na documentação de Comece a usar o Atlas. Para este tutorial, você precisa de uma conta do Atlas com um cluster de camada livre.
Você também precisa de uma chave de API do Atlas para a conta do MongoDB Cloud com a qual deseja se conectar. Você deve ser proprietário do projeto para criar um aplicativo modelo usando o App Services CLI.
Para saber mais sobre como instalar o App Services CLI, consulte Instalar o App Services CLI. Após instalar, execute o comando login utilizando a chave API para seu projeto Atlas.
Para executar consultas do Atlas Search, certifique-se de que seu cluster do Atlas está rodando a versão 4.2 ou mais recente do MongoDB.
Crie um novo aplicativo modelo
Este tutorial é baseado no aplicativo modelo de Flexible Sync React Native SDK denominado react-native.todo.flex
. Você começa com o aplicativo padrão e cria novas funcionalidades nele.
Para instalar e rodar o aplicativo modelo no seu computador, siga as instruções do tutorial do React Native
Adicione uma caixa de alerta
Após configurar e examinar o aplicativo-modelo, é hora de escrever algum código para implementar o novo recurso de alerta.
Nesta seção, adicione uma caixa de alerta para inserir termos que podem aparecer em tarefas específicas, importantes ou que exijam atenção imediata.
Crie o componente da caixa de alerta
No diretório src/
do modelo do aplicativo, crie um novo arquivo denominado AlertBox.tsx
e insira o seguinte código. Este arquivo inclui o formulário da IU para configurar alertas com base em termos específicos.
import React, {useState} from 'react'; import {StyleSheet, View} from 'react-native'; import {Text, Input, Button} from 'react-native-elements'; import {COLORS} from './Colors'; type Props = { onSubmit: ({term}: {term: string}) => void; }; export function AlertBox(props: Props): React.ReactElement<Props> { const {onSubmit} = props; const [term, setTerm] = useState(''); return ( <View style={styles.modalWrapper}> <Text h4 style={styles.addItemTitle}> Add Alert Term </Text> <Input placeholder="Enter term" onChangeText={(text: string) => setTerm(text)} autoCompleteType={undefined} /> <Button title="Submit" buttonStyle={styles.saveButton} onPress={() => onSubmit({term})} /> </View> ); } const styles = StyleSheet.create({ modalWrapper: { width: 300, minHeight: 200, borderRadius: 4, alignItems: 'center', }, addItemTitle: { margin: 20, }, saveButton: { width: 280, backgroundColor: COLORS.primary, }, });
Atualize a visualização principal
No src/ItemListView.tsx
, importe a caixa de alerta que você acabou de criar, adicionando a linha a seguir no início do arquivo:
import {AlertBox} from './AlertBox';
Em seguida, adicione o código abaixo para renderizar um botão que, ao ser clicado, mostrará uma caixa de alerta:
No início do bloco da função
ItemListView
, insira um hookuseState()
para acompanhar quando a caixa de alerta é exibida:src/ItemListView.tsxexport function ItemListView() { const realm = useRealm(); const items = useQuery(Item).sorted('_id'); const user = useUser(); const [showNewItemOverlay, setShowNewItemOverlay] = useState(false); const [showAlertBox, setShowAlertBox] = useState(false); Na tela principal, após o botão
Add To-Do
, adicione um botãoAlerts
para ativar ou desativar a sobreposição da caixa de alerta:src/ItemListView.tsxreturn ( <SafeAreaProvider> <View style={styles.viewWrapper}> ... <Button title="Add To-Do" buttonStyle={styles.addToDoButton} onPress={() => setShowNewItemOverlay(true)} icon={ <Icon type="material" name={'playlist-add'} style={styles.showCompletedIcon} color="#fff" tvParallaxProperties={undefined} /> } /> <Button title="Alerts" buttonStyle={styles.alertButton} onPress={() => setShowAlertBox(true)} icon={ <Icon type="material" name={'add-alert'} style={styles.showCompletedIcon} color="#fff" tvParallaxProperties={undefined} /> } /> <Overlay isVisible={showAlertBox} onBackdropPress={() => setShowAlertBox(false)}> <AlertBox onSubmit={({term}) => { setShowAlertBox(false); }} /> </Overlay> </View> </SafeAreaProvider> ); Para modificar o tamanho e a cor do botão, insira estas linhas de código no bloco
styles
localizadas no final do arquivo:src/ItemListView.tsxconst styles = StyleSheet.create({ ... toggleText: { flex: 1, fontSize: 16, }, alertButton: { backgroundColor: '#808080', borderRadius: 4, margin: 5, } });
Armazene os termos de alerta no Atlas
Agora que você criou o componente de frontend para a caixa de alerta, configure o backend do aplicativo para armazenar e acompanhar os termos de alerta no Atlas.
Criar uma nova coleção
Na IU do Atlas, crie uma coleção para armazenar os termos inseridos pelos usuários no aplicativo:
Se você ainda não estiver na página Database Deployments , clique na aba Data Services .
Para sincronizar a implantação com o aplicativo modelo, clique em Browse Collections.
No menu de navegação à esquerda, selecione o ícone + próximo ao banco de dados
todo
para criar uma nova coleção.Nomeie a coleção como
alerts
e clique em Create para salvá-la.
Habilite acesso à coleção
Após criar a coleção, conceda ao seu aplicativo as permissões necessárias para gravar na coleção todo.alerts
:
Clique na aba App Services.
Clique no bloco do seu aplicativo.
No menu à esquerda em Data Access, clique em Rules.
No banco de dados
todo
, clique na coleçãoalerts
.Na caixa de diálogo à direita, selecione a função pré-definida readAndWriteAll.
Clique em Add preset role para confirmar sua seleção.
Por padrão, seu aplicativo habilita esquemas de implantação. Para implantar manualmente suas alterações, clique em Review Draft & Deploy e depois em Deploy.
Grave na coleção
Após definir o acesso de gravação para a coleção todo.alerts
, volte ao código do aplicativo.
No início do bloco de função em src/ItemListView.tsx
, insira as linhas a seguir para definir uma função assistente que grava dados na coleção:
export function ItemListView() { const realm = useRealm(); const items = useQuery(Item).sorted('_id'); const user = useUser(); // addAlert() takes a string input and inserts it as a document in the todo.alerts collection const addAlert = async (text: string) => { const mongodb = user?.mongoClient("mongodb-atlas"); const alertTerms = mongodb?.db("todo").collection("alerts"); await alertTerms?.insertOne({ term: text.toLowerCase() }); };
A função addAlert()
aceita uma string como entrada e utiliza o React Native SDK para se conectar ao Atlas e adicionar um documento com o termo de alerta especificado à coleção no Atlas.
Em seguida, adicione a linha abaixo no controlador do envio da caixa de alerta para chamar addAlert()
toda vez que um usuário enviar um termo de alerta no aplicativo:
<Overlay isVisible={showAlertBox} onBackdropPress={() => setShowAlertBox(false)}> <AlertBox onSubmit={({term}) => { setShowAlertBox(false); addAlert(term); }} /> </Overlay>
Executar e Testar o Aplicativo
Seu aplicativo agora deve permitir que os usuários insiram termos de alerta individualmente para serem armazenados no Atlas.
Recrie o aplicativo e abra-o. Envie alguns termos como important
ou urgent
para receber alertas. Em seguida, exiba seus documentos na coleção todo.alerts
para confirmar se os termos aparecem no Atlas.
Adicione um trigger
Após criar a caixa de alerta e preparar a coleção de suporte, crie um Atlas Triggers que o alerte quando uma nova tarefa contiver um dos seus termos de alerta. Os triggers podem executar a lógica do aplicativo e do banco de dados em resposta a um evento de alteração. Cada trigger se vincula a uma Atlas Function que define o comportamento do trigger.
Nesta seção, você cria um trigger de banco de dados que é executado sempre que um usuário cria uma nova tarefa. Na função do trigger, você define:
A mensagem exibida nos logs do seu aplicativo.
A lógica do banco de dados, para que o trigger retorne uma mensagem apenas se o documento incluir um termo de alerta.
Uma consulta do Atlas Search que agrega outras tarefas que contêm o mesmo termo de alerta.
criar um índice do atlas search
Para executar queries de pesquisa do Atlas em seus dados, você deve primeiro criar um índice do Atlas Search para mapear os campos em sua coleção. Na IU do Atlas, crie um índice de pesquisa na coleção todo.Item
:
Retorne à página Database Deployments clicando na aba Data Services .
Clique no nome da implantação sincronizada com o aplicativo modelo e, depois, na aba Search.
Para criar seu primeiro índice do Atlas Search, clique em Create Search Index.
Na página Configuration Method, selecione Visual Editor e clique em Next.
Deixe o Index Name definido como
default
.Na seção Database and Collection, localize o banco de dados
todo
e selecione a coleçãoItem
.Clique em Next e, em seguida, clique em Create Search Index após revisar o índice.
Aguarde o índice para concluir a formação.
O índice deve levar cerca de um minuto para ser criado. Quando a criação se encerrar, a coluna Status mostrará
Active
.
Observação
Para saber mais sobre os índices do Atlas Search, consulte Crie um índice do Atlas Search.
Adicione um trigger de banco de dados
Para abrir a página de configuração do trigger de banco de dados na IU do App Services:
Clique na aba App Services e selecione o bloco do seu aplicativo.
No menu de navegação esquerdo, clique em Triggers.
Clique em Add a Trigger e deixe o Trigger type definido como Database.
Nomeie o trigger como
sendAlerts
.Configure o trigger para ouvir somente os novos documentos de tarefas inseridos na coleção
todo.Item
:Para o Cluster Name, selecione a implantação sincronizada com o aplicativo modelo.
Para o Database Name e Collection Name, selecione o banco de dados
todo
e a coleçãoItem
.Para o Operation Type, selecione Insert.
Habilite Full Document para incluir cada novo documento de relatório nos eventos de alteração enviados para a função trigger.
Defina uma função do Atlas
Vá para a seção Function na página de configurações do trigger e escolha + New Function no menu suspenso. Em seguida, defina a função do trigger:
Nomeie a função como
triggers/sendAlerts
.Copie o seguinte código no corpo da função:
functions/triggers/sendAlerts.jsexports = async function(changeEvent) { // Read the summary field from the latest inserted document const fullDocument = changeEvent.fullDocument; const summary = fullDocument.summary; // Connect to your Atlas deployment const mongodb = context.services.get("mongodb-atlas"); // Read task and alert data from collections in the todo database const tasks = mongodb.db("todo").collection("Item"); const alerts = mongodb.db("todo").collection("alerts"); const terms = await alerts.distinct("term"); // Check if the task summary matches any of the terms in the alerts collection for (let i = 0; i < terms.length ; i++) { if (summary.toLowerCase().includes(terms[i])) { console.log("The following task has been added to a to-do list: " + summary + ". You've been alerted because it contains the term, " + terms[i] + "."); // Aggregates any tasks that also contain the term by using an Atlas Search query const query = await tasks .aggregate([ { $search: { compound: { must: [{ phrase: { query: terms[i], path: "summary", }, }], mustNot: [{ equals: { path: "isComplete", value: true, }, }], }, }, }, { $limit: 5, }, { $project: { _id: 0, summary: 1, }, }, ]) .toArray(); relatedTerms = JSON.stringify(query); if (relatedTerms != '[]') { console.log("Related incomplete tasks: " + relatedTerms); } } } }; Esta função JavaScript retorna uma mensagem nos registros do aplicativo quando o usuário adiciona uma tarefa que contém um termo armazenado na coleção
todo.alerts
.A função executa uma consulta do Atlas Search para localizar outros documentos de tarefa na coleção
todo.Item
com o mesmo termo de alerta. A consulta usa:O estágio $search do pipeline para executar uma consulta na coleção.
As seguintes cláusulas do operador composto:
O estágio $limit para limitar a saída a 5 resultados.
O estágio $project para excluir todos os campos, exceto
summary
.
Observação
Para mais informações, consulte Crie e execute consultas no Atlas Search.
Ao concluir, clique em Save para implantar o trigger.
Executar e Testar o Aplicativo
O Atlas agora notifica quando um usuário cria uma tarefa no aplicativo que contém um termo de alerta.
Reconstrua e execute o aplicativo para garantir que tudo funcione. Insira algumas tarefas que contenham um termo de alerta que você inseriu anteriormente. Em seguida, verifique os logs para visualizar a saída do trigger. No menu suspenso, selecione o tipo Triggers para filtrar os seus registros de trigger.
Por exemplo, ao detectar o termo de alerta important
, o log de uma nova tarefa poderia ser assim:
Logs: [ "The following task has been added to a to-do list: Complete important tutorial. You've been alerted because it contains the term, important.", "Related incomplete tasks: [ {"summary": "Important: Create template app"}, {"summary": "Add important tasks"}, {"summary": "Make sure to read the documentation. This is important."}]" ]
O que vem a seguir?
Amplie a função de alerta para chamar um serviço externo que possa enviar um texto ou e-mail em vez de simplesmente registrar o evento. Para saber mais, consulte Dependências externas.
Consulte a documentação do Atlas Search para saber mais sobre indexação e pesquisa de dados no Atlas.
Saiba mais sobre autenticação e triggers agendados.
Defina pontos de extremidade HTTPS personalizados para criar rotas de API ou webhooks específicos do aplicativo.
Observação
Compartilhar feedback
Como foi? Use o widget Rate this page no canto inferior direito da página para avaliar sua eficácia. Ou registre um problema no repositório GitHub se você teve algum problema.