Estoy tratando de copiar datos de una colección a otra colección, no estoy seguro de lo que estoy haciendo bien o mal. Estoy tratando de copiar todo lo que está en "todo" con una fecha igual a 2021-08-14 y copiarlo en "plantilla". hasta ahora, todo lo que puedo hacer es obtener los datos de todo e imprimirlos en la consola
const db = firebase.firestore(); const todoRefFrom = db.collection('todo'); const todoRefTo = db.collection('templates'); const todos = await todoRefFrom.get(); todos.forEach(async doc => { console.log('set set', doc); todoRefTo.set(Map.fromEntries(doc.data().entries)); });Simplemente consulte la colección de tareas todo para los documentos que tengan fecha de inicio el 14 de agosto. Luego simplemente guarde todos los documentos en su nueva colección, en lotes, lo cual es una mejor manera de rendimiento.
const db = firebase.firestore(); const todoRefFrom = db.collection('todo'); const todoRefTo = db.collection('templates'); let startDate = new Date('2021-08-14'); let endDate = new Date('2021-08-15'); const todos = await todoRefFrom.where('dateField', '>=', startDate).where('dateField', '<', endDate).get(); let writeBatch = firebaseAdmin.firestore().batch(); let i = 0; for (let doc of todos.docs) { writeBatch.set(todoRefTo.doc(doc.id), doc.data()); i++; if (i > 400) { // write batch only allows maximum 500 writes per batch i = 0; console.log('Intermediate committing of batch operation'); await writeBatch.commit(); writeBatch = firebaseAdmin.firestore().batch(); } if (i > 0) { console.log('Firebase batch operation completed. Doing final committing of batch operation.'); await writeBatch.commit(); } else { console.log('Firebase batch operation completed.'); } });Inspirado en la respuesta de @Lahiru Chandima aquí, https://stackoverflow.com/a/60137639/3857918
PD: he reemplazado su forEach con simple for..of bucle aquí. Las llamadas asincrónicas forEach no se ejecutan en una secuencia, a veces pueden causar muchos problemas durante la depuración.