Estou tentando criar um aplicativo onde posso obter / definir dados em contas de usuários específicos e fiquei tentado pelo Firebase.
O problema que tenho é que não sei como segmentar dados de usuários específicos quando minha estrutura se parece com isso:
online-b-cards
- users
- InnROTBVv6FznK81k3m
- email: "hello@hello"
- main: "Hello world this is a text"
- name: "Alex"
- phone: 12912912
Eu olhei em volta e realmente não consigo encontrar nada sobre como acessar dados individuais e muito menos quando recebem um hash aleatório como seu ID.
Como eu pegaria informações de usuários individuais com base em seus nomes? Se houver uma maneira melhor de fazer isso, por favor me diga!
firebase
firebase-realtime-database
Richard Bamford
fonte
fonte
Respostas:
Anteriormente, o Firebase exigia que você gerasse seus próprios índices ou baixasse todos os dados em um local para encontrar e recuperar elementos que correspondessem a algum atributo filho (por exemplo, todos os usuários
name === "Alex"
).Em outubro de 2014, o Firebase lançou uma nova funcionalidade de consulta por meio do
orderByChild()
método, que permite fazer esse tipo de consulta com rapidez e eficiência. Veja a resposta atualizada abaixo.Ao gravar dados no Firebase, você tem algumas opções diferentes que refletem diferentes casos de uso. Em um nível alto, o Firebase é um repositório de dados NoSQL estruturado em árvore e fornece algumas primitivas simples para gerenciar listas de dados:
Escreva no Firebase com uma chave conhecida e exclusiva:
Anexar às listas com uma chave gerada automaticamente que classificará automaticamente por hora escrita:
Ouça as alterações nos dados por seu caminho exclusivo e conhecido:
Filtre ou encomende dados em uma lista por valor de chave ou atributo :
Com a adição de
orderByChild()
, você não precisa mais criar seu próprio índice para consultas sobre atributos filho! Por exemplo, para recuperar todos os usuários com o nome "Alex":Engenheiro na Firebase aqui. Ao gravar dados no Firebase, você tem algumas opções diferentes que refletirão diferentes casos de uso de aplicativos. Como o Firebase é um repositório de dados NoSQL, você precisará armazenar seus objetos de dados com chaves exclusivas, para poder acessar diretamente esse item ou carregar todos os dados em um local específico e percorrer cada item para encontrar o nó que procura. . Consulte Gravando dados e gerenciando listas para obter mais informações.
Ao gravar dados no Firebase, você pode
set
usar dados usando um caminho único (definido) (ou sejaa/b/c
) oupush
dados em uma lista, o que gerará um ID único (ou sejaa/b/<unique-id>
) e permitirá que você classifique e consulte os itens nessa lista por tempo . O ID exclusivo que você vê acima é gerado ao ligarpush
para anexar um item à lista emonline-b-cards/users
.Em vez de usar
push
aqui, eu recomendaria usarset
e armazenar os dados de cada usuário usando uma chave exclusiva, como o endereço de email do usuário. Em seguida, você pode acessar os dados do usuário diretamente, navegandoonline-b-cards/users/<email>
através do Firebase JS SDK. Por exemplo:Observe que, como o Firebase não permite certos caracteres nas referências (consulte Criando referências ), removemos
.
e substituímos por um,
no código acima.fonte
orderByChild
recurso. Dado que essa resposta aparece frequentemente como uma resposta relevante / relacionada, as pessoas são obrigadas a analisá-la e devem estar cientes dos novos recursos de consulta.Você pode obter os detalhes pelo seguinte código.
fonte
Eu acho que a melhor abordagem é definir os IDs dos usuários com base no objeto de autenticação fornecido pelo Firebase. Quando crio meus usuários, faço:
Esse id vem de:
Os serviços de autenticação do Firebase sempre garantirão um ID exclusivo entre todos os seus provedores para serem definidos no uid. Dessa forma, você sempre terá o auth.uid e poderá acessar facilmente o usuário desejado para atualizá-lo, como:
fonte
Esta foi uma paráfrase de uma postagem que me ajudou ao tentar acessar o ID exclusivo gerado automaticamente. Acesse os IDs exclusivos do Firebase na ng-repeat usando a sincronização implícita angularFire
Obrigado, bennlich (fonte):
O Firebase se comporta como um objeto javascript normal. Talvez o exemplo abaixo possa levá-lo ao caminho certo.
Edit: Não tem 100% de certeza do resultado desejado, mas aqui está um pouco mais que pode desencadear um momento de 'aha'. Clique na tecla que você está tentando acessar diretamente no painel do Firebase. A partir daí, você pode usar algo como:
fonte
Veja como acessar as chaves exclusivas geradas automaticamente no Firebase: estrutura de dados : - OnlineBcards - UniqueKey
fonte
A maneira mais simples é parar de usar o
.push(){}
função que irá gerar essa chave aleatória. Mas use a
.update(){}
função em que você pode especificar o nome da criança em vez de ter a chave aleatória.fonte
Recuperando dados:
No seu banco de dados, você está usando um ID aleatório gerado usando o
push()
, portanto, se desejar recuperar os dados, faça o seguinte:Usando o Firebase no aplicativo Android:
Usando Firebase em Javascript:
Aqui você tem o instantâneo (localização dos dados) e, em
users
seguida, faz um loop dentro de todos os IDs aleatórios e recupera os nomes.Recuperando dados para um usuário específico:
Agora, se você deseja recuperar informações apenas para um usuário específico, é necessário adicionar uma consulta:
Usando o Firebase no aplicativo Android:
Usando Firebase com Javascript
Usar
orderByChild("name").equalTo("Alex")
é como dizer,where name="Alex"
para recuperar os dados relacionados ao Alex.Melhor maneira:
O melhor é usar a autenticação do Firebase, gerando um ID exclusivo para cada usuário e usá-lo em vez de um ID aleatório
push()
. Dessa forma, você não precisa percorrer todos os usuários, pois possui o ID e pode acessá-lo facilmente.Primeiro, o usuário precisa estar conectado, então você pode recuperar o ID exclusivo e anexar um ouvinte para recuperar os outros dados desse usuário:
Usando o Firebase com Android:
Usando Firebase com Javascript:
fonte
A maneira mais simples e melhor de adicionar um ID exclusivo ao seu banco de dados de acordo com o usuário autenticado é:
A interface do usuário será um ID exclusivo para um email / usuário autenticado específico
fonte