La JS API v9 de Firebase trajo diferentes cambios. Uno de los mayores cambios es el hecho de que DocumentReference ya no permite el acceso a las subcolecciones. O al menos, no directamente desde DocumentReference, como solíamos hacerlo con v8.
En v8, por ejemplo, podríamos hacer algo como esto:
//say we have a document reference const myDocument = db.collection("posts").doc(MY_DOC_ID); //we can access the subcollection from the document reference and, //for example, do something with all the documents in the subcollection myDocument.collection("comments").get().then((querySnapshot) => { querySnapshot.forEach((doc) => { // DO SOMETHING }); });Con v9, tenemos un enfoque diferente. Digamos que obtenemos nuestro documento:
const myDocument = doc(db, "posts", MY_DOC_ID);Como puede notar, la forma en que escribimos el código es diferente. En v8 solíamos escribirlo de forma procedimental. Con v9, todo cambió a una forma más funcional, donde podemos usar funciones como doc(), collection(), etc. Entonces, para hacer lo mismo que hicimos con el ejemplo anterior y hacer algo con cada documento en la subcolección, el código para la API v9 debería verse así:
const subcollectionSnapshot = await getDocs(collection(db, "posts", MY_DOC_ID, "comments")); subcollectionSnapshot.forEach((doc) => { // DO SOMETHING });Tenga en cuenta que podemos pasar parámetros adicionales a funciones como collection() y doc(). El primero siempre será la referencia a la base de datos, el segundo será la colección raíz y, a partir de ahí, todos los demás parámetros se agregarán a la ruta. En mi ejemplo, donde escribí
collection(db, "posts", MY_DOC_ID, "comments")significa