es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo realizar acciones cuando el cambio de transmisión de MongoDB Realm Web SDK se cierra o agota el tiempo de espera?

Quiero borrar todas las inserciones de un usuario en una colección cuando deje de ver un cambio en un flujo desde un cliente de React. Estoy utilizando el SDK de Realm Web para esto.

Aquí tienes un resumen de mi código con lo que quiero hacer al final:

import * as Realm from "realm-web";

const realmApp: Realm.App = new Realm.App({ id: realmAppId });
const credentials = Realm.Credentials.anonymous();
const user: Realm.User = await realmApp.logIn(credentials);

const mongodb = realmApp?.currentUser?.mongoClient("mongodb-atlas");
const users = mongodb?.db("users").collection("users");

const changeStream = users.watch();

for await (const change of changeStream) {
  switch (change.operationType) {
    case "insert": {
      ...
      break;
    }
    case ...
  }
}

// Este pseudocódigo muestra lo que quiero hacer
changeStream.on("close", () => // borrar todas las inserciones del usuario)

changeStream.on("timeout", () => // borrar todas las inserciones del usuario)

changeStream.on("el usuario cierra la aplicación y también se cierra el flujo", () => ... )

Los patrones del SDK de Realm Web parecen ser diferentes a los de NodeJS y no parecen incluir un método para cerrar un flujo o para ejecutar un callback cuando se cierra. En cualquier caso, no se adaptan a mi caso de uso.

Estos documentos de MongoDB Realm Web conducen a más documentos sobre Realm. A menos que me lo esté perdiendo, ambos conjuntos no hablan sobre cómo monitorear el cierre y el tiempo de espera de un observador de flujo de cambios instanciado desde el SDK de Realm Web, y cómo hacer algo cuando sucede.

Pensé que otra forma de hacer esto sería a través de los Triggers de Realm. Pero no parece probable según sus documentos.

¿Se puede hacer esto desde un cliente de front-end? ¿Hay alguna manera de hacerlo directamente en MongoDB de manera “serverless”?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que no hay una forma directa de monitorear cuándo se cierra o expira un flujo de cambios utilizando el SDK web de MongoDB Realm, y no está claro si esto se puede hacer en el lado del servidor de MongoDB de manera sin servidor. Una posible solución alternativa podría ser realizar un seguimiento de todas las inserciones realizadas por un usuario en una colección separada y eliminarlas cuando sea necesario basándose en diferentes eventos, como el cierre de sesión del usuario o el cierre de la aplicación. Otra opción podría ser implementar un mecanismo de sondeo que verifique periódicamente si el flujo de cambios está aún activo y elimine las inserciones del usuario si no lo está. Sin embargo, estas soluciones alternativas pueden no ser ideales y pueden afectar al rendimiento, por lo que es importante considerar cuidadosamente los compromisos.

Comments are closed.