Estoy tratando de obtener datos de la base de datos. Pero después de cambiar mi código por problemas de rendimiento en mi proyecto nativo de reacción, no pude encontrar la consulta que deseaba. El trato es que tengo este tipo de estructura de datos. va bajo /root/news/0/coin_name. La tecla 0 aumenta como 1,2,3...n para cada uno de mis datos. para un mejor entendimiento:
cnh I I --coins | | --news| | |--0| --coin_name='algorand' ... |--1| ...Quiero obtener datos donde coin_name sea igual a 'algorand'. Intenté algunas consultas pero ninguna funcionó. Te agradecería si me ayudas.
Lo intenté:
useEffect(()=>{ const fbdb = async () =>{ await database() .ref(newsKey) .orderByChild('year') .equalTo('2021') .once('value') .then(snapshot => { const data = snapshot.val(); const formattedResponse=formatMarketData(data,show); return setNews(formattedResponse) }); }; fbdb(); },[show,year]);EDITAR Por último, pasé los datos de mi archivo de Excel a la base de datos en tiempo real, el problema con los datos de cadena se resolvió, para el año igual a la consulta, debería haberlo analizado a int primero, después de analizar el valor del año a entero ese problema también se resolvió.
creo que estas buscando
await database() .ref('news') .orderByChild('coin_name') .equalTo('algorand')Sin embargo, tenga en cuenta que estas teclas secuenciales numéricas suelen ser un antipatrón en Firebase. Para saber por qué y una estructura más idiomática con teclas de inserción, lea Prácticas recomendadas: arreglos en Firebase .
Un ejemplo funcional de esto: https://jsbin.com/focaveq/3/edit?js,console
{ "coins" : [ { } ], "news" : [ { "coin_name" : "algorand", "event_date" : "2019-06-24", "exchange" : "crypto.com", "month" : "6", "year" : "2019" }, { "coin_name" : "algorand", "event_date" : "2021-01-06", "exchange" : "bitmart", "month" : "1", "year" : "2021" }, { "coin_name" : "litecoin", "event_date" : "2020-12-25", "exchange" : "binance qtly", "month" : "12", "year" : "2020" }, { "coin_name" : "litecoin", "event_date" : "2021-01-04", "exchange" : "coinflex", "month" : "1", "year" : "2021" }, { "coin_name" : "tron", "event_date" : "2020-06-20", "exchange" : "resfinex", "month" : "6", "year" : "2020" }, { "coin_name" : "tron", "event_date" : "2020-07-07", "exchange" : "all", "month" : "7", "year" : "2020" }, { "coin_name" : "tron", "event_date" : "2020-07-10", "exchange" : "phemex", "month" : "7", "year" : "2020" }, { "coin_name" : "tron", "event_date" : "2021-04-21", "exchange" : "all", "month" : "4", "year" : "2021" }, { "coin_name" : "tron", "event_date" : "2021-05-19", "exchange" : "phemex", "month" : "5", "year" : "2021" }, { "coin_name" : "tron", "event_date" : "2021-06-17", "exchange" : "bitpanda", "month" : "6", "year" : "2021" } ] }esta es la instancia del conjunto de datos
Después de toda mi investigación en la web, llegué a la conclusión de que la API de la base de datos en tiempo real de firebase no admite consultas anidadas con rutas desconocidas. Debería usar otra estructura o filtrar datos después de obtener todos los datos (que es muy ineficiente para grandes conjuntos de datos). Así que decidí intentar usar Firestore solo para noticias sin una etiqueta de noticias. Te dejaré saber si de esa manera funciona.