He estado tratando de obtener la cantidad de usuarios que tienen el mismo "referralId" en mi base de datos en tiempo real de Firebase,
users { AY35bkc5cbkufik8gfe3vjbmgr { email: james @gmail.com verify: none referralid: AY35ja35 } B16fty9jDchfNgdx7Fxnjc5nxf5v { email: mobilewisdom @gmail.com verify: none referralid: AY35ja35 } } ¿Cómo puedo usar JavaScript para contar la cantidad de cuenta con id de referralid:AY35ja35 ? Intenté:
const query = ref.orderByChild('referralid').equalTo('AY35ja35'); query.get().then((results) => { console.log(Object.keys(results.val()).length); results.forEach((snapshot) => { console.log(snapshot.key, snapshot.val()); }); }); Pero recibo este error en mi consola: Uncaught TypeError: query.get is not a function
En primer lugar, deberá ejecutar una consulta para obtener los datos de firebase utilizando el paquete firebase, axios o fetch
Sus datos se obtienen en forma de Objeto que contiene diferentes objetos. Puede usar el usuario para .. en .. bucle para iterar a través del objeto.
var count = 0 for (const user in users) { if (user.referralid==="AY35ja35") { count++ } }O use la función Object.values(object) para obtener una matriz de usuarios. Ahora puede usar una función de matriz de JavaScript como mapa o filtro.
mediante el uso de mapa. puedes hacerlo así:
var count=0 user.map(user=>{if(user.referralid==="AY35ja35"){count++})o usando filtro
const matchedUsers = user.filter(user=>(user.referralid==="AY35ja35")) const count = matchedUsers.lengthEspero que esto ayude :)
En la sintaxis v8/namespaced sería:
const ref = firebase.database().ref('users'); const query = ref.orderByChild('referralid').equalTo('AY35ja35'); const results = await query.get(); console.log(Object.keys(results.val()).length); results.forEach((snapshot) => { console.log(snapshot.key, snapshot.val()); }); O si estás en un entorno donde await no funciona:
const ref = firebase.database().ref('users'); const query = ref.orderByChild('referralid').equalTo('AY35ja35'); query.get().then((results) => { console.log(Object.keys(results.val()).length); results.forEach((snapshot) => { console.log(snapshot.key, snapshot.val()); }); });En la sintaxis v9/modular, el equivalente sería:
const ref = ref(getDatabase(), 'users'); const query = query(ref, orderByChild('referralid'), equalTo('AY35ja35')); const results = await get(query); console.log(Object.keys(results.val()).length); results.forEach((snapshot) => { console.log(snapshot.key, snapshot.val()); }); O si estás en un entorno donde await no funciona:
const ref = ref(getDatabase(), 'users'); const query = query(ref, orderByChild('referralid'), equalTo('AY35ja35')); get(query).then((results) => { console.log(Object.keys(results.val()).length); results.forEach((snapshot) => { console.log(snapshot.key, snapshot.val()); }); });