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

467
Vistas
Cloud Firestore: Actualizar campos en objetos anidados con clave dinámica

siguiendo la documentación oficial de firestore:

 { name: "Frank", favorites: { food: "Pizza", color: "Blue", subject: "recess" }, age: 12 } // To update favorite color: db.collection("users").doc("frank").update({ "favorites.color": "Red" })

Me gustaría usar una clave dinámica en lugar de color.

 db.collection("users").doc("frank").update({ "favorites[" + KEY + "].color": true });

esto, por supuesto, no es posible y arrojará un error.

He estado tratando de hacer esto:

 db.collection("users").doc("frank").update({ favorites: { [key]: { color": true } } });

En realidad, se está actualizando con la clave correcta pero, desafortunadamente, está sobrescribiendo las otras claves (se están eliminando).

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Encontré la solución inspirada en una solución de firebase (reemplazando "/" por ".").

 var usersUpdate = {}; usersUpdate[`favorites.${key}.color`] = true; db.collection("users").doc("frank").update(usersUpdate);
over 4 years ago · Santiago Trujillo Denunciar

0

Esta solución funcionó para mí:

 db.collection('users').doc('frank').update({ [`favorites.${key}.color`]: true });
over 4 years ago · Santiago Trujillo Denunciar

0

Solo una nota sobre una posible trampa: después de descubrir que puede actualizar los campos anidados usando una sintaxis de puntos, intenté usar set() de la misma manera, ya que necesitaba que funcionara ya sea que el objeto ya exista o no:

 var updateObj = {['some.nested.property']: 9000}; docRef.set(updateOb, {merge: true});

Desafortunadamente, esto no funciona; en su lugar, establece una propiedad cuya clave es some.nested.property . Incoherente, pero bueno.

Afortunadamente, parece que set(updateObj, {merge: true}) realiza una fusión profunda, por lo que si construye su objeto de actualización como un objeto completamente anidado, sus objetos anidados también se fusionarán correctamente:

 // create the object db.doc('testCollection/doc').set({p1: {['p2']: {p3: true}}}, {merge: true}) // update the existing object db.doc('testCollection/doc').set({p1: {['p2']: {p4: true}}}, {merge: true}) // result is now this: { p1: { p2: { p4: true, p3: true } } }
over 4 years ago · Santiago Trujillo 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