Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Atlas App Services

Tutorial: Compila Búsqueda Inversa en Tu aplicación usando Activadores y Atlas Search

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:

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.

Antes de empezar:

  • 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.

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:

  1. Comience con la aplicación de plantillas

  2. Set Up the Template App

  3. Familiarícese con la aplicación de plantillas

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.

1

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.

src/AlertBox.tsx
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,
},
});
2

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 hook useState() para rastrear la vista del cuadro de alerta:

    src/ItemListView.tsx
    export 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-Do en la vista principal, añade un botón Alerts que activa la superposición del cuadro de alerta:

    src/ItemListView.tsx
    return (
    <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 styles en la parte inferior del archivo:

    src/ItemListView.tsx
    const styles = StyleSheet.create({
    ...
    toggleText: {
    flex: 1,
    fontSize: 16,
    },
    alertButton: {
    backgroundColor: '#808080',
    borderRadius: 4,
    margin: 5,
    }
    });

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.

1

En la interfaz de usuario de Atlas, cree una colección para almacenar los términos que los usuarios introducen en la aplicación:

  1. Si aún no estás en el Database Deployments página, haga clic en la pestaña Data Services.

  2. Para la implementación que está sincronizada con la aplicación de plantilla, haga clic en Browse Collections.

  3. En la navegación izquierda, haga clic en el ícono + junto a la base de datos todo para agregar una nueva colección.

  4. Nombra la colección alerts y luego haz clic en Create para guardarla.

2

Después de crear la colección, debe dar a su aplicación los permisos necesarios para guardar en la colección todo.alerts:

  1. Haz clic en la pestaña App Services.

  2. Haga clic en el mosaico de su aplicación.

  3. En la navegación izquierda, bajo Data Access, haga clic en Rules.

  4. En la base de datos todo, haga clic en la colección alerts.

  5. En el cuadro de diálogo de la derecha, seleccione el rol preestablecido readAndWriteAll.

  6. Se debe hacer clic en Add preset role para confirmar la selección.

  7. 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.

3

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:

src/ItemListView.tsx
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:

src/ItemListView.tsx
<Overlay
isVisible={showAlertBox}
onBackdropPress={() => setShowAlertBox(false)}>
<AlertBox
onSubmit={({term}) => {
setShowAlertBox(false);
addAlert(term);
}}
/>
</Overlay>
4

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.

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.

1

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:

  1. Regrese a la página Database Deployments haciendo clic en la pestaña Data Services.

  2. 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.

  3. Para crear su primer índice de búsqueda de Atlas, haga clic en Create Search Index.

  4. En la página Configuration Method, seleccione Visual Editor y haga clic en Next.

  5. Deja el Index Name configurado en default.

  6. En la sección Database and Collection, busque la base de datos todo y seleccione la colección Item.

  7. Haga clic en Next y, a continuación, haga clic en Create Search Index después de revisar el índice.

  8. 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.

2

Para abrir la página de configuración de activadores de base de datos en la Interfaz de usuario Realm:

  1. Haz clic en la pestaña App Services y selecciona la viñeta de tu aplicación.

  2. En el menú de navegación de la izquierda, haga clic en Triggers.

  3. Haga clic en Add a Trigger y deje Trigger type establecido en Database.

  4. Nombra el disparador sendAlerts.

  5. 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 todo y la colección Item.

    • 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.

3

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:

  1. Nombra la función triggers/sendAlerts.

  2. Copia el siguiente código en el cuerpo de la función:

    functions/triggers/sendAlerts.js
    exports = 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.Item que 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 must cláusula y el operador de frase para consultar cualquier tarea con un summary que contenga el término de alerta.

      • La cláusula mustNot y el operador equals para excluir tareas completadas.

    • La etapa $limit para limitar la salida a 5 resultados.

    • La etapa de $project para excluir todos los campos excepto summary.

  3. Cuando haya terminado, haga clic en Save e implemente el disparador.

4

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."}]"
]

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.

Next

¿Qué son los servicios de aplicación Atlas?