Tiempo estimado para completar: 30 minutos
Puede utilizar Atlas App Services con Atlas Triggers y Búsqueda Atlas para integrar funciones como la búsqueda inversa en sus aplicaciones. Esta función le permite almacenar parámetros de búsqueda y luego asociar nuevos documentos con ellos.
En este tutorial, se comienza con una aplicación móvil preconstruida en TypeScript que incluye una aplicación React Native en funcionamiento (frontend) y los archivos de configuración correspondientes de App Services (backend). Esta aplicación de plantilla es una aplicación básica de lista de tareas que permite a los usuarios realizar varias acciones para gestionar sus tareas. Para obtener más información sobre la aplicación de plantilla, consulte el Tutorial: Atlas Device Sync para React Native.
Una vez que la aplicación de plantilla esté en funcionamiento, añadirá una nueva función que le avisa cuando un usuario crea una tarea que contiene una palabra o frase específica. Esta función ilustra cómo podría implementar la búsqueda inversa en su aplicación de producción. Utilizará Atlas para almacenar términos específicos sobre los que se emitirán alertas y, a continuación, asociará nuevas tareas con esos términos mediante los disparadores de Atlas y la búsqueda de Atlas.
La funcionalidad incluye:
Un cuadro de alerta que utiliza el SDK de Realm React y @realm/react eso:
Le permite ingresar los términos sobre los cuales desea recibir alertas.
Almacena los términos especificados en Atlas.
Un disparador de base de datos con una función Atlas personalizada que:
Le avisa cuando una nueva tarea contiene un término que usted ha ingresado.
Agrupa y devuelve tareas relacionadas al utilizar una consulta de búsqueda de Atlas.
Por ejemplo, si desea saber cuándo los usuarios envían una tarea urgente, puede ingresar un término como urgentLuego, cuando un usuario agregue una tarea que contenga el término, como Urgent: complete this task, recibirás una alerta de inmediato.
Requisitos previos
Antes de empezar:
Debes configurar tu entorno local para el desarrollo con React Native. Para obtener instrucciones detalladas, consulta "Configuración del entorno de desarrollo" en la documentación de React Native.
Este tutorial comienza con una aplicación de Plantilla. Necesitas una Cuenta de Atlas, una clave API y App Services CLI para crear una aplicación de plantilla.
Para obtener más información sobre cómo crear una cuenta de Atlas, consulte la sección Primeros pasos con Atlas. Para este tutorial, necesita una cuenta de Atlas con un clúster de nivel gratuito.
También necesita una clave API de Atlas para la cuenta de MongoDB Cloud con la que desea iniciar sesión. Debe ser propietario del proyecto para crear una aplicación de plantilla mediante la CLI de App Services.
Para aprender más sobre cómo instalar App Services CLI, consulta Instalar App Services CLI. Después de instalar, ejecuta el comando login utilizando la clave API de tu proyecto Atlas.
Para ejecutar consultas de búsqueda de Atlas, asegúrese de que su clúster Atlas ejecute MongoDB versión 4.2 o superior.
Crea una nueva aplicación de plantilla
Este tutorial se basa en la aplicación de plantilla de sincronización flexible del SDK de React Native, llamada react-native.todo.flex. Comienza con la aplicación predeterminada y crea nuevas funciones a partir de ella.
Para poner en funcionamiento la aplicación de plantilla en su computadora, siga los pasos descritos en el tutorial de React Native:
Agregar un cuadro de alerta
Una vez que haya configurado y explorado la aplicación de plantilla, es momento de escribir código para implementar la nueva función de alerta.
En esta sección, agrega un cuadro de alerta que te permite ingresar términos que podrían aparecer en tareas específicas, importantes o urgentes.
Crea el componente Cuadro de alerta
En el directorio src/ de la aplicación de plantilla, cree un nuevo archivo AlertBox.tsx y agregue el siguiente código. Este archivo contiene el formulario de interfaz de usuario que le permite introducir los términos sobre los que desea recibir alertas.
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, }, });
Actualizar la vista principal
En src/ItemListView.tsx, importe el cuadro de alerta que acaba de definir agregando la siguiente línea en la parte superior del archivo:
import {AlertBox} from './AlertBox';
Luego, agregue el siguiente código para renderizar un botón que muestre el cuadro de alerta cuando se hace clic:
En la parte superior del bloque de funciones
ItemListView, agrega un hookuseState()para rastrear la vista del cuadro de alerta: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); Después del botón
Add To-Doen la vista principal, añade un botónAlertsque activa la superposición del cuadro 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 cambiar el tamaño y el color del botón, agregue las siguientes líneas al bloque
stylesen la parte inferior del archivo:src/ItemListView.tsxconst styles = StyleSheet.create({ ... toggleText: { flex: 1, fontSize: 16, }, alertButton: { backgroundColor: '#808080', borderRadius: 4, margin: 5, } });
Términos de alerta de la tienda en Atlas
Ahora que has creado el componente frontend para el cuadro de alerta, configura el backend de la aplicación para almacenar y hacer seguimiento de tus términos de alerta en Atlas.
Crear una nueva colección
En la interfaz de usuario de Atlas, cree una colección para almacenar los términos que los usuarios introducen en la aplicación:
Si aún no estás en el Database Deployments página, haga clic en la pestaña Data Services.
Para la implementación que está sincronizada con la aplicación de plantilla, haga clic en Browse Collections.
En la navegación izquierda, haga clic en el ícono + junto a la base de datos
todopara agregar una nueva colección.Nombra la colección
alertsy luego haz clic en Create para guardarla.
Habilitar el acceso a la colección
Después de crear la colección, debe dar a su aplicación los permisos necesarios para guardar en la colección todo.alerts:
Haz clic en la pestaña App Services.
Haga clic en el mosaico de su aplicación.
En la navegación izquierda, bajo Data Access, haga clic en Rules.
En la base de datos
todo, haga clic en la colecciónalerts.En el cuadro de diálogo de la derecha, seleccione el rol preestablecido readAndWriteAll.
Se debe hacer clic en Add preset role para confirmar la selección.
De forma predeterminada, la aplicación habilita los borradores de implementación. Para implementar manualmente los cambios, haga clic Review Draft & Deploy Deployen y luego en.
Guarda en la colección
Una vez que haya configurado el acceso de escritura a la colección todo.alerts, regrese al código de su aplicación.
En src/ItemListView.tsx, agregue las siguientes líneas en la parte superior del bloque de funciones para crear una función auxiliar que escriba en la colección:
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() }); };
La función addAlert() recibe una entrada de tipo string y utiliza el React Native SDK para conectarse a Atlas e insertar el término de alerta especificado como documento a tu colección.
A continuación, añade la siguiente línea al controlador de envío de la alerta para llamar a addAlert() cuando un usuario envíe un término de alerta en la aplicación:
<Overlay isVisible={showAlertBox} onBackdropPress={() => setShowAlertBox(false)}> <AlertBox onSubmit={({term}) => { setShowAlertBox(false); addAlert(term); }} /> </Overlay>
Ejecutar y probar la aplicación
Su aplicación ahora debería permitir a los usuarios ingresar términos de alerta uno a la vez para almacenarlos en Atlas.
Reconstruya la aplicación y ábrala. Introduzca algunos términos para recibir alertas, como important urgento. Luego, revise sus documentos en la todo.alerts colección para confirmar que los términos aparecen en Atlas.
Agregar un disparador
Ahora que ha creado el cuadro de alerta y configurado su colección de respaldo, cree un disparador Atlas que le avise cuando una nueva tarea contenga uno de sus términos de alerta. Los disparadores pueden ejecutar la lógica de la aplicación y la base de datos en respuesta a un evento de cambio. Cada disparador se vincula a una función Atlas que define su comportamiento.
En esta sección, creas un(a) activador de base de datos que se ejecuta cada vez que un usuario crea una nueva tarea. En la función del activador, se define:
El mensaje que se muestra en los registros de su aplicación.
La lógica de la base de datos, para que el disparador devuelva el mensaje solo cuando el documento contenga un término de alerta.
Una consulta de búsqueda de Atlas que agrega otras tareas que contienen el mismo término de alerta.
Crear un índice de Atlas Search
In order to run Atlas Search queries on your data, you must first create an Atlas Search index to map the fields in your collection. In the Atlas UI, create a search index on the todo.Item collection:
Regrese a la página Database Deployments haciendo clic en la pestaña Data Services.
Haz clic en el nombre de la implementación que se ha sincronizado con la aplicación de plantilla y, a continuación, haz clic en la pestaña Search.
Para crear su primer índice de búsqueda de Atlas, haga clic en Create Search Index.
En la página Configuration Method, seleccione Visual Editor y haga clic en Next.
Deja el Index Name configurado en
default.En la sección Database and Collection, busque la base de datos
todoy seleccione la colecciónItem.Haga clic en Next y, a continuación, haga clic en Create Search Index después de revisar el índice.
Espere a que el índice termine de construirse.
El índice debería tardar aproximadamente un minuto en compilar. Una vez finalizada la creación, la columna Status muestra
Active.
Nota
To learn more about Atlas Search indexes, see Create an Atlas Search Index.
Add a Database Trigger
Para abrir la página de configuración de activadores de base de datos en la Interfaz de usuario Realm:
Haz clic en la pestaña App Services y selecciona la viñeta de tu aplicación.
En el menú de navegación de la izquierda, haga clic en Triggers.
Haga clic en Add a Trigger y deje Trigger type establecido en Database.
Nombra el disparador
sendAlerts.Configura el activador para que escuche únicamente los nuevos documentos de tareas insertados en la colección
todo.Item:Para Cluster Name, seleccione la implementación que está sincronizada con la aplicación de plantilla.
Para Database Name y Collection Name, selecciona la base de datos
todoy la colecciónItem.Para el Operation Type, seleccione Insert.
Habilite Full Document para incluir cada nuevo documento de informe en el evento de cambio pasado a la función de activación.
Definir una función Atlas
Vaya a la sección Function de la página de configuración del disparador y seleccione + New Function en el menú desplegable. A continuación, defina la función del disparador:
Nombra la función
triggers/sendAlerts.Copia el siguiente código en el cuerpo de la función:
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 función de JavaScript devuelve un mensaje en los registros de su aplicación cuando un usuario ingresa a una tarea que contiene un término almacenado en la colección
todo.alerts.La función también incluye una consulta de búsqueda de Atlas para encontrar otros documentos de tareas en la colección
todo.Itemque contengan el mismo término de alerta. La consulta utiliza:La etapa de canalización $search para consultar la colección.
The following compound operator clauses:
La etapa $limit para limitar la salida a 5 resultados.
La etapa de $project para excluir todos los campos excepto
summary.
Nota
To learn more, see Create and Run Atlas Search Queries.
Cuando haya terminado, haga clic en Save e implemente el disparador.
Ejecutar y probar la aplicación
Atlas ahora está configurado para avisarte cuando un usuario crea una tarea en la aplicación que contiene un término de alerta.
Reconstruya y ejecute la aplicación para asegurarse de que todo funciona correctamente. Introduzca algunas tareas que contengan un término de alerta que haya introducido previamente. A continuación, revise sus registros para ver el resultado del disparador. Puede filtrar los registros del disparador seleccionando el Triggers tipo en el menú desplegable.
Por ejemplo, si uno de sus términos de alerta es important, la salida del registro para una nueva tarea podría parecerse a la siguiente:
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."}]" ]
¿Qué es lo próximo?
Amplía la función de alerta para llamar a un servicio externo que te envíe un mensaje de texto o un correo electrónico en lugar de simplemente registrarlo. Para obtener más información, consulta Dependencias externas.
Lea nuestra documentación de Búsqueda en Atlas para obtener más información sobre cómo indexar y consultar sus datos de Atlas.
Obtenga información sobre la autenticación y los activadores programados.
Define puntos finales HTTPS personalizados para crear rutas de API o webhooks específicos de la aplicación.
Nota
Share Feedback
¿Cómo te fue? Usa el Rate this page widget en la parte inferior derecha de la página para evaluar su efectividad. O reporta un problema en el repositorio de GitHub si tuviste algún problema.