Tengo mapas anidados en Firestore, estoy tratando de actualizar un objeto en otro objeto usando la notación de puntos pero está concatenando la clave llamada con el nombre del objeto en Firestore, si actualizo este mapa anidado (objeto) sin notación de puntos, sobrescribirá todo campo de mapa
if (doc && doc.exists) { await doc.ref.update({subscription: {chartslab: { "options.expiration": new Date(new Date() .getTime()+(10*24*60*60*1000)), "options.updatedAt": new Date().toISOString(), }}}).then(() => { return res.status(200).send("Document successfully updated!"); }); } else { await doc.ref.set({subscription: {chartslab: {options: { expiration: new Date(new Date().getTime()+(5*24*60*60*1000)), }}}}); return res.status(200).send("Done"); }Crear
Actualizar
Si está utilizando la notación de puntos para actualizar el campo anidado, debe agregar la ruta completa en notación de puntos como se muestra a continuación:
await doc.ref.update({ 'subscription.chartLabs.options.expiration': 'value', 'subscription.chartLabs.options.updatedAt': 'value' })Hay un paquete plano que puede ser útil en este caso si tiene muchos campos anidados para actualizar.
const flatten = require('flat'); const updateObj = flatten({ subscription: { chartLabs: { options: { expiration: '...', updatedAt: '...' } } } })Como está actualizando todo el objeto 'opciones', puede intentar esto:
await doc.ref.update({ 'subscription.chartLabs.options': { expiration: '...', updatedAt: '...' } })