Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

120
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!