Me gustaría filtrar mi término de búsqueda contra todos los datos de la base de datos.
Creo que la lógica sería: capitalizar tanto el término de búsqueda como los datos, luego comparar el término de búsqueda con cada campo de los datos. Luego setData() a esa búsqueda filtrada.
Los datos constantes se usan en una lista plana, por lo que mis datos filtrados se mostrarán aquí.
Gracias por cualquier ayuda.
Mi código:
const SearchFeed = (searchterm) => { const q = query(PostsCollectionRef, orderBy('timestamp', 'desc')); onSnapshot(q, querySnapshot => { const id = querySnapshot.docs.map(doc => ({ id: doc.id, timestamp: doc.data().timestamp, postID: doc.data().PostID, title: doc.data().status + " " + doc.data().Type, status: doc.data().status, location: doc.data().location, type: doc.data().Type, injured: doc.data().Injured, collar: doc.data().Collar, color: doc.data().Colour, username: doc.data().username[0], description: doc.data().Description, imagesrc: doc.data().picture })) //need to capitalize searchterm //need to capitalize filter value //eg id.filter((capitalize(val) => val.type == capitalize(searchterm) const Animal = id.filter((val) => val.type == searchterm) setData(Animal) console.log(Animal) }); }Como ya tiene todos los datos de las publicaciones en el cliente, puede usar un paquete como Lunr para agregar la funcionalidad de búsqueda de texto completo en la aplicación web. Puede usar el método add() para agregar datos de todos los documentos obtenidos y luego search() para buscar documentos en lugar de usar un filter() .
Tenga en cuenta que está obteniendo todos los documentos de la colección de publicaciones cada vez, por lo que implica muchos cargos de lectura. También puede intentar usar Algolia (con Firebase Algolia Extension ). Esto indexa todos los documentos agregados a Firestore en Algolia y luego puede consultar directamente los datos de Algolia según el término de búsqueda.