async function process_tasks() { let campaignsRef = db.collection('campaigns') let activeRef = await campaignsRef.where('active', '==', true).select().get(); for (campaign of activeRef.docs) { console.log(campaign.id); (CHOICE 1) let tasksRef = await campaignsRef.doc(campaign.id).collection('tasks').get(); (CHOICE 2) let tasksRef = await campaign.collection('tasks').get(); for(task of tasksRef.docs) { console.log(task.id, task.data()) } } } Cuando uso (OPCIÓN 2), "documentRef" no es un programa de ERROR de DocumentReference válido .
No hay una variable llamada documentRef en mi código (como una nota para los comentarios que piensan así erróneamente)
¿Me pregunto porque? ¿La campaign no debería ser igual acampañasRef.doc campaignsRef.doc(campaign.id) ?
Todo lo que escribiste en la segunda elección es correcto, excepto una cosa. La variable (campaña) creada en el ciclo for es DocumentSnapshot . Debe usar .ref para acceder a la referencia desde DocumentSnapshot .
async function process_tasks() { let campaignsRef = db.collection('campaigns') let activeRef = await campaignsRef.where('active', '==', true).select().get(); for (campaign of activeRef.docs) { //campaign is DocumentSnapshot console.log(campaign.id); (CHOICE 1) let tasksRef = await campaignsRef.doc(campaign.id).collection('tasks').get(); (CHOICE 2) let tasksRef = await campaign.ref.collection('tasks').get(); // add .ref after campaign for(task of tasksRef.docs) { console.log(task.id, task.data()) } } }Gracias.