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, comenzarás con una aplicación móvil TypeScript prediseñada que incluye una aplicación React Native funcional (frontend) y sus correspondientes archivos de configuración de App Services (backend). Esta plantilla de aplicación es una aplicación básica de lista de tareas que permite a los usuarios gestionar sus tareas. Para obtener más información sobre la plantilla de aplicación, consulta el Tutorial: Sincronización de dispositivos Atlas 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 función 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. Necesita una cuenta de Atlas, una clave API y la CLI de App Services para crearla.
Puede obtener más información sobre cómo crear una cuenta de Atlas en la documentación de introducción a 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 obtener más información sobre la instalación de la CLI de App Services, consulte Instalar la CLI de App Services. Después de la instalación, ejecute el comando de inicio de sesión con la clave API de su 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.
Crear 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 función
ItemListView, agregue un ganchouseState()para realizar un seguimiento de 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, agregue un botónAlertsque alterna 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 ha creado el componente frontend para el cuadro de alerta, configure el backend de la aplicación para almacenar y realizar un seguimiento de los 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 ingresan 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.
Escribe a 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, se crea un disparador de base de datos que se ejecuta cada vez que un usuario crea una nueva tarea. En la función del disparador, 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
Para ejecutar consultas de Atlas Search en sus datos, primero debe crear un índice de Atlas Search para mapear los campos de su colección. En la interfaz de usuario de Atlas, cree un índice de búsqueda en la todo.Item colección:
Regrese a la página Database Deployments haciendo clic en la pestaña Data Services.
Haga clic en el nombre de la implementación que está sincronizada con la aplicación de plantilla y luego haga 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.
Deje el Index Name establecido en
default.En la sección Database and Collection, busque la base de datos
todoy seleccione la colecciónItem.Haga clic en Next y luego en Create Search Index después de revisar su índice.
Espere a que el índice termine de construirse.
El índice debería tardar aproximadamente un minuto en generarse. Al finalizar, la columna Status mostrará
Active.
Nota
Para obtener más información sobre los índices de búsqueda de Atlas, consulte Crear un índice de búsqueda de Atlas.
Add a Database Trigger
Para abrir la página de configuración del activador de la base de datos en la interfaz de usuario de App Services:
Haga clic en la pestaña App Services y seleccione el mosaico para su 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.Configure el disparador para escuchar solo los nuevos documentos de tarea 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.Copie el siguiente código en el cuerpo de la función:
funciones/disparadores/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 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.
Las siguientes cláusulas de operador compuesto:
La etapa $limit para limitar la salida a 5 resultados.
La etapa de $project para excluir todos los campos excepto
summary.
Nota
Para obtener más información,consulte Crear y ejecutar consultas de búsqueda de Atlas.
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."}]" ]
¿Que sigue?
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
Compartir comentarios
¿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.