Estoy tratando de consultar una colección muy simple que se ve así:
urls: { 07WmGw7w0N8JiD7j1P60: { url: "www.yay.com" }, 07WmGw7w0N8JiD7j1P60: { url: "www.anotherurl.com" } }Así que mi código se ve así:
export async function checkDoc() { try { const urlsRef = await collection(db, "urls"); const q = await query(urlsRef, where("url", "==", "www.yay.com")); console.log(q) return q } catch (e) { console.error("Error querying document: ", e); return e.response } }Pero la respuesta que recibo es así:
Por lo que puedo decir, así es exactamente como se hace esto en la documentación . Ya busqué respuestas similares en Stackoverflow, pero en su mayoría usan el método de encadenamiento Web v8 que no estoy seguro de cómo implementar con mi configuración actual. ¿El problema está en la forma en que uso firebase o en la forma en que hago la llamada asíncrona?
Esto se debe a que en realidad no consulta la base de datos, sino que simplemente crea una query (es decir, el objeto q ).
Para consultar/obtener la base de datos de acuerdo con esta consulta, debe pasar esta query al método getDocs() , de la siguiente manera:
export async function checkDoc() { try { const urlsRef = collection(db, "urls"); const q = query(urlsRef, where("url", "==", "www.yay.com")); const querySnapshot = await getDocs(q); querySnapshot.forEach(docSnap => { // .... }) return ... // Generate the returned object in the forEach loop, see link below } catch (e) { console.error("Error querying document: ", e); return e.response } } Esto se muestra aquí en la documentación de Firestore. Tenga en cuenta que los métodos collection() y query() no son asíncronos, por lo que no es necesario llamarlos con await . Por el contrario, getDocs() es asíncrono.