Anteriormente publiqué una pregunta sobre cómo consultar un valor específico dentro de una matriz. Me dijeron que ya había una pregunta similar. He buscado la solución para esa pregunta, sin embargo, recibo un error. Este es mi código actualmente para verificar si el campo mal_id dentro de la matriz de favoritos contiene una identificación que yo pasé.
const docRef = collection(db, 'users') const q = query(docRef, where('favourites', 'array-contains', {mal_id: id}))Luego adjunté un método onSnapshot para ver si los datos existen, que es así
onSnapshot(q, (snapshot) => { if(snapshot.data()){ console.log(true) } else{ console.log(false) } })Pero recibo un error que dice que snapshot.data no es una función. idk si se supone que no debe usar un método onSnapshot en este tipo de consulta o mi código es incorrecto. He adjuntado una imagen de la estructura de mi base de datos. Gracias.
* Editar Entonces, he cambiado mi estructura de datos. Ahora estoy creando un nuevo campo llamado animeID y luego almacenando la identificación en él. Luego hago que la matriz contenga eso, pero la instantánea todavía me da el mismo error. Aquí está el código actualizado junto con una nueva imagen de la estructura de mi base de datos.
const docRef = collection(db, 'users') const q = query(docRef, where('animeID', 'array-contains', `mal_id: ${id}`)) onSnapshot(q, (snapshot) => { if(snapshot.data()){ console.log(true) } else{ console.log(false) } })Como comentó Doug, el operador array-contains de Firestore verifica la equivalencia entre el valor que proporciona y un elemento de matriz completo. No puede encontrar un subconjunto de un elemento.
La solución común es agregar un campo adicional a su documento con solo los valores de mal_id que desea consultar. Entonces algo como:
Favourites_mal_ids: [21] Y luego puede realizar una array-contains en ese campo.