Entonces, básicamente, lo que estoy intentando es acceder a un documento a través de un atributo de referencia que está escrito en otro documento como este:
Pantalla de la colección y del documento que contiene las referencias en un array
Aquí está la función javascript con la que me gustaría acceder al documento. En este ejemplo, solo devuelvo el atributo de referencia para ver qué contiene:
exports.importProducts = functions.https.onRequest(async (request, response) => { const res = { success: false, error: "", docrefs: []}; const groceryListID = "groceryList1"; try { const groceryListDoc = await admin .firestore() .collection("GroceryList") .doc(groceryListID.toString()) .get(); if (!groceryListDoc.exists) { res.error = "Grocery list could not be found"; response.send(res); // return res; } else { const docref = groceryListDoc.data().docReferences; res.success = true; res.docrefs = docref[0]; response.send(res); } } catch (e) { res.error = "Error while reading the Grocery List document : " + e; response.send(res); //return res; } });Aquí está el resultado que obtengo cuando estoy leyendo el atributo de referencia:
Resultado en formato de texto: {"success":true,"error":"","docrefs":{"_firestore":{"projectId":""},"_path":{"segments":["Products" ,"p1"]},"_convertidor":{}}}
Sé que podría analizar los elementos de la matriz de los "segmentos" para obtener la ruta y el acceso al documento, pero ¿hay una mejor manera de administrar eso? ¿Quizás gracias a un objeto DocumentReference?
El valor que el SDK le devuelve para un tipo de campo DocumentReference en la base de datos también es en realidad un objeto DocumentReference del SDK. Entonces, simplemente puede llamar a get() en el valor que obtiene, para obtener una instantánea de los datos del documento de referencia.