Recibo el siguiente error cuando uso FieldValue.increment cuando ejecuto una función en la nube envuelta con firebase-functions-test:
El valor del argumento "datos" no es un documento válido de Firestore.
No se pudo serializar el objeto de tipo "NumericIncrementTransform" (que se encuentra en el campo "recuento").
Firestore no admite objetos de JavaScript con prototipos personalizados (es decir, objetos que se crearon a través del operador "nuevo").
Aquí está el código que está envuelto:
// `functions` is the firebase-functions module // `firestore` is an initialized FirebaseFirestore.Firestore instance pointing to the // Firestore emulator const { functions, firestore } = require('../../firebase'); const getTestRelationshipRefs = require('../utils/getTestRelationshipRefs'); const admin = require('firebase-admin'); module.exports = functions.firestore .document('orgs/{orgId}/tests/{testId}') .onUpdate(async (change, context) => { const beforeData = change.before.data(); const afterData = change.after.data(); const relationshipRefs = getTestRelationshipRefs(afterData, context.orgId); const batch = firestore.batch(); if (beforeData.active === false && afterData.active === true) { for (const ref of relationshipRefs) { batch.set( ref, { count: admin.firestore.FieldValue.increment(1) }, { merge: true, } ); } }Hay otras preguntas que parecen similares, como: Función de nube de Firebase - Error no controlado Error: Actualizar ()
Pero parece que estoy haciendo la solución publicada.
Hay otras publicaciones que he visto que indican que esto puede ser el resultado de tener diferentes versiones de @google-cloud/firestore en el árbol de dependencias. No creo que sea eso en este caso, pero estaría encantado de estar equivocado.
Todas las dependencias relacionadas con firebase en mi paquete.json son:
"firebase-admin": "^9.5.0", "firebase-functions": "^3.13.2", "firebase-tools": "^9.6.1", "@firebase/rules-unit-testing": "^1.2.5", "firebase-functions-test": "^0.2.3", Aquí está el resultado de npm ls @google-cloud/firestore
└─┬ firebase-admin@9.5.0 └── @google-cloud/firestore@4.9.8 ¿Por qué admin.firestore.FieldValue.increment devuelve el valor incorrecto?