Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

122
Vistas
Función de nube de Firebase. Crear documentos en subcolección de colecciones específicas

aquí está la premisa básica de lo que estoy tratando de lograr aquí. si un usuario hace una pregunta sobre un producto, quiero enviar una notificación a otros usuarios que actualmente poseen ese producto. básicamente diciendo "oye, tal y tal tiene una pregunta sobre este producto. Tal vez puedas ayudar ya que ya lo tienes".

cada colección de perfil de usuario tiene una subcolección llamada 'notificar' donde las notificaciones se almacenan para varias cosas. lo que debo hacer es ordenar los productos de usuario y encontrar a cada usuario que posee el producto y luego crear una publicación de notificación solo en las subcolecciones de notificación para aquellos usuarios específicos que poseen ese producto.

aquí está el código básico. el primer bit funciona porque devuelve una matriz de ID de usuario que poseen ese producto. donde estoy luchando ahora es lograr que cree un nuevo documento en la subcolección Notificar solo para esos usuarios específicos. ¿Es posible hacer esto?

 exports.Questions = functions.firestore .document("/userPost/{id}") .onCreate(async (snap, context) => { const data = snap.data(); if (data.question == true) { const userProducts = await db .collection("userProducts") .where("product", "==", data.tag) .get(); const userData = userProducts.docs.map((doc) => doc.data().userId); await db .collection("userProfile") .where("userId", "in", userData) .get() .then((querySnapshot) => { return querySnapshot.docs.ref.collection("notify").add({ message: "a user has asked about a product you own", }); }); });
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Su solución actual está en el camino correcto, pero se pueden realizar mejoras.

  • Utilice un patrón de protección para la data.question == true .
  • No necesita obtener userProfile/<uid> ya que no está utilizando su contenido.
  • Al cambiar varios documentos a la vez, debe considerar agruparlos por lotes para simplificar el manejo de errores.
  • ref.add(data) es una abreviatura de ref.doc().set(data) que puede usar en la escritura por lotes para crear nuevos documentos.
 exports.Questions = functions.firestore .document("/userPost/{id}") .onCreate(async (snap, context) => { const data = snap.data(); if (!data.question) { console.log("New post not a question. Ignored.") return; } const userProducts = await db .collection("userProducts") .where("product", "==", data.tag) .get(); const userIds = userProducts.docs.map(doc => doc.get("userId")); // more efficient than doc.data().userId // WARNING: Limited to 500 writes at once. // If handling more than 500 entries, split into groups. const batch = db.batch(); const notificationContent = { message: "a user has asked about a product you own", }; userIds.forEach(uid => { // creates a ref to a new document under "userProfile/<uid>/notify" const notifyDocRef = db.collection(`userProfile/${uid}/notify`).doc(); batch.set(notifyDocRef, notificationContent); }); await batch.commit(); // write changes to Firestore });

Nota: Aquí no hay un manejo especial para cuando nadie ha comprado un producto antes. Considere también hacer ping al propietario del producto.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda