Estoy escribiendo una función en la nube que moverá los eventos caducados de una colección a otra. No funciona como se esperaba y soy muy novato en Javascript. Por favor salvame.
const functions = require("firebase-functions"); const admin = require("firebase-admin"); admin.initializeApp(); const db = admin.firestore(); exports.expireEvents = functions.region("us-west2").pubsub.schedule('* * * * *').onRun(async (context) => { await db.collection("Events").where('endDate', '<=', admin.firestore.Timestamp.now().millisecondsSinceEpoch).get().then((snapshot) => { snapshot.forEach(async (doc) => { // For all expired events, we will perform operations on some of their fields const event = doc.data(); // Write document to collection of "expired events" await db.collection("ArchivedEvents").doc(event.eid).set(event); // For all the guests in that expired event, do stuff; guests should be a list of strings. event.guests.forEach(async (uid) => { // Create a new write batch const batch = db.batch(); // Get user and update some attributes const guest = await db.collection("Users").doc(uid); // Add all operations to be performed for given user to this batch batch.update(guest, {eventsAttended: admin.firestore.FieldValue.arrayUnion(event.eid)}); batch.update(guest, {eventsAttending: admin.firestore.FieldValue.arrayRemove(event.eid)}); // Execute batch of operations await batch.commit(); }); // Delete doc from "not expired" collection await db.collection("Events").doc(event.eid).delete(); }); console.log(`Successfully expired events ending on ${admin.firestore.Timestamp.now()}.`); return true; }) .catch((err) => { console.error(`Could not get or update documents. Error ${err}.`); return false; }); });Esta es la siguiente parte del error. Probé con una colección sin documentos y con algunos documentos, pero estoy empezando a pensar que debido a que ninguno de ellos ha caducado todavía, ¿es por eso que recibo este error?
Resto del registro de errores
If you want to ignore undefined values, enable `ignoreUndefinedProperties`. at Object.validateUserInput (/workspace/node_modules/@google-cloud/firestore/build/src/serializer.js:277:19) at validateQueryValue (/workspace/node_modules/@google-cloud/firestore/build/src/reference.js:2230:18) at CollectionReference.where (/workspace/node_modules/@google-cloud/firestore/build/src/reference.js:1061:9) at /workspace/index.js:139:33 at cloudFunction (/workspace/node_modules/firebase-functions/lib/cloud-functions.js:131:23) at /layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/function_wrappers.js:144:25 at processTicksAndRejections (node:internal/process/task_queues:96:5)Tienes al menos dos problemas:
Date de JavaScript (no un objeto de Timestamp de tiempo de Firebase) en su consulta, es decir, where('endDate', '<=', new Date())Timestamp no tiene una propiedad millisecondsSinceEpoch que, creo, está causando el error "indefinido" que está encontrando.