Estoy tratando de crear una aplicación donde pueda obtener / configurar datos en cuentas de usuarios específicos y Firebase me tentó.
El problema que tengo es que no sé cómo dirigir datos de usuarios específicos cuando mi estructura se ve así:
online-b-cards
- users
- InnROTBVv6FznK81k3m
- email: "hello@hello"
- main: "Hello world this is a text"
- name: "Alex"
- phone: 12912912
He mirado a mi alrededor y realmente no puedo encontrar nada sobre cómo acceder a datos individuales y mucho menos cuando se les da un hash aleatorio como ID.
¿Cómo haría para obtener información de usuarios individuales basada en su nombre? Si hay una mejor manera de hacerlo, ¡dímelo!
firebase
firebase-realtime-database
Richard Bamford
fuente
fuente
Respuestas:
Anteriormente, Firebase requería que generara sus propios índices o descargara todos los datos en una ubicación para encontrar y recuperar elementos que coincidieran con algún atributo secundario (por ejemplo, todos los usuarios con
name === "Alex"
).En octubre de 2014, Firebase lanzó una nueva funcionalidad de consulta a través del
orderByChild()
método, que le permite hacer este tipo de consulta de manera rápida y eficiente. Vea la respuesta actualizada a continuación.Al escribir datos en Firebase, tiene algunas opciones diferentes que reflejarán diferentes casos de uso. En un alto nivel, Firebase es un almacén de datos NoSQL estructurado en árbol, y proporciona algunas primitivas simples para administrar listas de datos:
Escriba en Firebase con una clave única y conocida:
Agregue a las listas con una clave generada automáticamente que se ordenará automáticamente por hora escrita:
Escuche los cambios en los datos por su ruta única y conocida:
Filtre u ordene datos en una lista por clave o valor de atributo :
¡Con la adición de
orderByChild()
, ya no necesita crear su propio índice para consultas sobre atributos secundarios! Por ejemplo, para recuperar todos los usuarios con el nombre "Alex":Ingeniero en Firebase aquí. Al escribir datos en Firebase, tiene algunas opciones diferentes que reflejarán diferentes casos de uso de aplicaciones. Dado que Firebase es un almacén de datos NoSQL, deberá almacenar sus objetos de datos con claves únicas para que pueda acceder directamente a ese elemento o cargar todos los datos en una ubicación particular y recorrer cada elemento para encontrar el nodo que está buscando . Consulte Escribir datos y administrar listas para obtener más información.
Cuando escribe datos en Firebase, puede
set
usar datos utilizando una ruta única y definida (es decira/b/c
), opush
datos en una lista, lo que generará una identificación única (es decira/b/<unique-id>
) y le permitirá ordenar y consultar los elementos de esa lista por tiempo . La identificación única que está viendo arriba se genera al llamarpush
para agregar un elemento a la lista enonline-b-cards/users
.En lugar de usar
push
aquí, recomendaría usarset
y almacenar los datos de cada usuario con una clave única, como la dirección de correo electrónico del usuario. Luego puede acceder a los datos del usuario directamente navegando aonline-b-cards/users/<email>
través de Firebase JS SDK. Por ejemplo:Tenga en cuenta que, dado que Firebase no permite ciertos caracteres en las referencias (consulte Creación de referencias ), eliminamos
.
y reemplazamos con a,
en el código anterior.fuente
orderByChild
función. Dado que esta respuesta aparece con bastante frecuencia como una respuesta relevante / relacionada, es probable que las personas la vean y deben conocer las nuevas funciones de consulta.Puede obtener los detalles por el siguiente código.
fuente
Creo que el mejor enfoque es definir los identificadores de los usuarios basados en el objeto de autenticación proporcionado por Firebase. Cuando creo mis usuarios, hago:
Esta identificación proviene de:
Los servicios de autenticación de Firebase siempre asegurarán una identificación única entre todos sus proveedores que se establecerá en uid. De esta manera siempre tendrá el auth.uid y podrá acceder fácilmente al usuario deseado para actualizarlo, como:
fuente
Esta fue una paráfrasis de una publicación que me ayudó al intentar acceder a la identificación única generada automáticamente. Acceda a identificadores únicos de Firebase dentro de ng-repeat usando la sincronización implícita angularFire
Gracias, bennlich (fuente):
Firebase se comporta como un objeto javascript normal. Quizás el ejemplo a continuación pueda llevarlo por el camino correcto.
Editar: No estoy 100% seguro de su resultado deseado, pero aquí hay un poco más que podría provocar un momento 'aha'. Haz clic en la tecla a la que intentas acceder directamente en el panel de Firebase. Desde allí puedes usar algo como:
fuente
Así es como acceder a las claves únicas generadas automáticamente en Firebase: estructura de datos : - OnlineBcards - UniqueKey
fuente
La forma más sencilla es dejar de usar el
.push(){}
función que generará esa clave aleatoria. Pero en su lugar, use la
.update(){}
función donde puede especificar el nombre del niño en lugar de tener la clave aleatoria.fuente
Recuperando datos:
En su base de datos, está utilizando una identificación aleatoria que se genera utilizando
push()
, por lo tanto, si desea recuperar los datos, haga lo siguiente:Usando Firebase en la aplicación de Android:
Usando Firebase en Javascript:
Aquí tiene la instantánea (ubicación de los datos) y
users
luego realiza un bucle dentro de todos los identificadores aleatorios y recupera los nombres.Recuperación de datos para un usuario específico:
Ahora, si desea recuperar información solo para un usuario específico, debe agregar una consulta:
Usando Firebase en la aplicación de Android:
Usando Firebase con Javascript
Usar
orderByChild("name").equalTo("Alex")
es como decirwhere name="Alex"
que recuperará los datos relacionados con Alex.Mejor manera:
Lo mejor es usar Firebase Authentication, generando así una identificación única para cada usuario y usándola en lugar de una identificación aleatoria
push()
, de esta manera no tiene que recorrer todos los usuarios ya que tiene la identificación y puede acceder fácilmente a ella.Primero, el usuario debe iniciar sesión, luego puede recuperar la identificación única y adjuntar un oyente para recuperar los otros datos de ese usuario:
Usando Firebase con Android:
Usando Firebase con Javascript:
fuente
La manera más simple y mejor de agregar una identificación única a su base de datos según el usuario autenticado es esta:
El UId será un ID único para un usuario / correo electrónico autenticado específico
fuente