recuperar query guardar from datos data consultas javascript firebase firebase-database

javascript - query - ¿Cómo recuperar varias claves en Firebase?



query firebase android (2)

¿Es esta la forma adecuada de invocar varias claves en el mismo punto final en Firebase?

Sí, generalmente esta es una buena solución para recuperar cada grupo de esta manera.

¿Firebase proporciona una mejor manera de resolver este problema?

No creo que Firebase proporcione ninguna otra función / consulta que pueda ayudar en este caso.

De todos modos, esto podría mejorarse guardando la referencia en una variable y haciendo un bucle en las teclas del objeto directamente. Además, si solo necesita recuperar esos datos una vez, debe usar once() lugar de on()

var groupRef = firebase.database().ref(''groups/'') var data = snapshot.val() for (var groupID in data) { groupRef.child(data[groupID]).once(...) }

Otra forma podría ser usar las functions de Firebase para las instantáneas de datos, como por ejemplo.

snapshot.forEach(function(childSnapshot) { groupRef.child(childSnapshot.key).once(...) })

Teniendo en cuenta esta estructura de datos:

{ "users":{ "user-1":{ "groups":{ "group-key-1":true, "group-key-3":true } } }, "groups":{ "group-key-1":{ "name":"My group 1" }, "group-key-2":{ "name":"My group 2" }, "group-key-3":{ "name":"My group 3" }, "group-key-4":{ "name":"My group 4" }, } }

Pude obtener los grupos de un usuario en particular con:

firebase.database().ref(''users/user-1/groups'').on(...)

Lo cual me daría este objeto:

{ "group-key-1":true, "group-key-3":true }

Entonces ahora quiero recuperar la información para esos grupos.

Mi instinto inicial sería repetir esas claves y hacer esto:

var data = snapshot.val() var keys = Object.keys(data) for (var i = 0; i < keys.length; i++) { firebase.database().ref(''groups/'' + keys[i]).on(...) }

¿Es esta la forma adecuada de invocar varias claves en el mismo punto final en Firebase?

¿Firebase proporciona una mejor manera de resolver este problema?


Sí, vas por el camino correcto. Como está escrito en esta pregunta, firebase canalizará sus solicitudes y no tendrá que preocuparse por el rendimiento y el tiempo de ida y vuelta. Tan pronto como comience su iteración, recibirá datos de la base de fuego. Así que ten en cuenta que debes manejarlo correctamente en tu interfaz de usuario.

Otra opción, depende de cuán grandes sean los datos de su /groups , es mantener una instantánea (podría ser un $firebaseObject si está usando angularfire) de la rama completa /groups que se actualizará siempre que los datos cambien. Entonces solo tienes que rastrear esta instantánea. Pero nuevamente, si planea jugar con una gran cantidad de grupos, su solución actual es una mejor opción.

Además, le recomiendo que se encargue de configurar un evento para cada grupo que recupere. Tenga en cuenta que la devolución de llamada se activará siempre que los datos cambien (depende del evento configurado). Dependiendo de su caso de uso, debería considerar usar .once("value" ya que activará los datos solo una vez, lo que lo hará más confiable, más funcional y evitará el manejo de devoluciones de llamada cuando no los esté esperando.