Próbuję stworzyć aplikację, w której mogę pobierać / ustawiać dane na kontach określonych użytkowników i kusiło mnie Firebase.
Problem polega na tym, że nie wiem, jak kierować reklamy na określone dane użytkowników, gdy moja struktura wygląda następująco:
online-b-cards
- users
- InnROTBVv6FznK81k3m
- email: "hello@hello"
- main: "Hello world this is a text"
- name: "Alex"
- phone: 12912912
Rozejrzałem się i tak naprawdę nie mogę znaleźć niczego, jak uzyskać dostęp do poszczególnych danych, nie mówiąc już o tym, że otrzymują losowy hash jako identyfikator.
Jak mam się zabrać do pobierania informacji o poszczególnych użytkownikach na podstawie ich nazwisk? Jeśli istnieje lepszy sposób na zrobienie tego, powiedz mi!
firebase
firebase-realtime-database
Richard Bamford
źródło
źródło
Odpowiedzi:
Wcześniej Firebase wymagało wygenerowania własnych indeksów lub pobrania wszystkich danych z lokalizacji, aby znaleźć i pobrać elementy, które pasowały do jakiegoś atrybutu podrzędnego (na przykład wszyscy użytkownicy z
name === "Alex"
).W październiku 2014 r. Firebase wprowadził nową funkcję zapytań za pomocą tej
orderByChild()
metody, która umożliwia szybkie i wydajne wykonywanie tego typu zapytań. Zobacz zaktualizowaną odpowiedź poniżej.Podczas zapisywania danych do Firebase masz kilka różnych opcji, które będą odzwierciedlać różne przypadki użycia. Ogólnie rzecz biorąc, Firebase jest magazynem danych NoSQL o strukturze drzewa i zapewnia kilka prostych prymitywów do zarządzania listami danych:
Napisz do Firebase za pomocą unikalnego, znanego klucza:
Dołączaj do list za pomocą automatycznie generowanego klucza, który będzie automatycznie sortowany według czasu zapisania:
Nasłuchuj zmian danych według ich unikalnej, znanej ścieżki:
Filtruj lub porządkuj dane na liście według klucza lub wartości atrybutu :
Po dodaniu
orderByChild()
nie musisz już tworzyć własnego indeksu dla zapytań dotyczących atrybutów potomnych! Na przykład, aby pobrać wszystkich użytkowników o nazwie „Alex”:Inżynier w Firebase tutaj. Podczas zapisywania danych w Firebase masz kilka różnych opcji, które będą odzwierciedlać różne przypadki użycia aplikacji. Ponieważ Firebase jest magazynem danych NoSQL, będziesz musiał przechowywać obiekty danych z unikalnymi kluczami, aby mieć bezpośredni dostęp do tego elementu, lub załadować wszystkie dane w określonej lokalizacji i zapętlić każdy element, aby znaleźć węzeł, którego szukasz . Aby uzyskać więcej informacji, zobacz Zapisywanie danych i zarządzanie listami .
Podczas zapisywania danych w Firebase możesz albo
set
dane przy użyciu unikalnej, zdefiniowanej ścieżki (tj.a/b/c
), Albopush
dane na liście, która wygeneruje unikalny identyfikator (tj.a/b/<unique-id>
) I pozwoli na sortowanie i wysyłanie zapytań do elementów na tej liście według czasu . Unikalny identyfikator, który widzisz powyżej, jest generowany przez wywołaniepush
dodania elementu do listy pod adresemonline-b-cards/users
.Zamiast używać
push
tutaj, zalecałbym używanieset
i przechowywanie danych dla każdego użytkownika za pomocą unikalnego klucza, takiego jak adres e-mail użytkownika. Następnie możesz uzyskać bezpośredni dostęp do danych użytkownika, przechodząc doonline-b-cards/users/<email>
za pomocą pakietu SDK Firebase JS. Na przykład:Zwróć uwagę, że ponieważ Firebase nie zezwala na określone znaki w odniesieniach (zobacz Tworzenie odwołań ), usuwamy znak
.
i zastępujemy go a,
w powyższym kodzie.źródło
orderByChild
funkcję. Biorąc pod uwagę, że ta odpowiedź pojawia się dość często jako odpowiednia / powiązana odpowiedź, ludzie są zobowiązani do jej obejrzenia i powinni być świadomi nowych funkcji zapytania.Możesz pobrać szczegóły za pomocą następującego kodu.
źródło
Myślę, że najlepszym podejściem jest zdefiniowanie identyfikatorów użytkowników na podstawie obiektu uwierzytelniania dostarczonego przez Firebase. Tworząc użytkowników, robię:
Ten identyfikator pochodzi z:
Usługi uwierzytelniania Firebase zawsze zapewniają wszystkim swoim dostawcom unikalny identyfikator, który ma być ustawiony na uid. W ten sposób zawsze będziesz mieć auth.uid i możesz łatwo uzyskać dostęp do żądanego użytkownika, aby go zaktualizować, na przykład:
źródło
To była parafraza posta, który pomógł mi przy próbie uzyskania dostępu do automatycznie generowanego unikalnego identyfikatora. Uzyskaj dostęp do unikalnych identyfikatorów Firebase w ramach ng-repeat dzięki niejawnej synchronizacji angularFire
Dzięki, bennlich (źródło):
Firebase zachowuje się jak normalny obiekt javascript. Być może poniższy przykład poprowadzi Cię na właściwą drogę.
Edycja: Nie jestem w 100% pewien pożądanego wyniku, ale tutaj jest trochę więcej, które może rozpalić moment „aha”. Kliknij klucz, do którego próbujesz uzyskać dostęp, bezpośrednio w panelu Firebase. Stamtąd możesz użyć czegoś takiego:
źródło
Oto jak uzyskać dostęp do automatycznie generowanych unikalnych kluczy w Firebase: struktura danych : - OnlineBcards - UniqueKey
źródło
Najprostszym sposobem jest zaprzestanie używania
.push(){}
funkcja, która wygeneruje ten losowy klucz. Zamiast tego użyj
.update(){}
funkcji, w której możesz określić imię dziecka zamiast losowego klucza.źródło
Pobieranie danych:
W swojej bazie danych korzystasz z losowego identyfikatora, który jest generowany za pomocą narzędzia
push()
, dlatego jeśli chcesz odzyskać dane, wykonaj następujące czynności:Korzystanie z Firebase w aplikacji na Androida:
Korzystanie z Firebase w JavaScript:
Tutaj masz migawkę (lokalizację danych),
users
a następnie pętlę wewnątrz wszystkich losowych identyfikatorów i odzyskujesz nazwy.Pobieranie danych dla konkretnego użytkownika:
Teraz, jeśli chcesz pobrać informacje tylko dla określonego użytkownika, musisz dodać zapytanie:
Korzystanie z Firebase w aplikacji na Androida:
Korzystanie z Firebase z JavaScriptem
Używanie
orderByChild("name").equalTo("Alex")
jest jak mówieniewhere name="Alex"
, że pobierze dane związane z Alexem.Najlepszym sposobem:
Najlepszą rzeczą jest użycie uwierzytelniania Firebase, a tym samym wygenerowanie unikalnego identyfikatora dla każdego użytkownika i użycie go zamiast losowego identyfikatora
push()
, w ten sposób nie musisz przechodzić przez wszystkich użytkowników, ponieważ masz identyfikator i masz do niego łatwy dostęp.Najpierw użytkownik musi być zalogowany, a następnie można pobrać unikalny identyfikator i dołączyć odbiornik, aby pobrać inne dane tego użytkownika:
Korzystanie z Firebase z Androidem:
Korzystanie z Firebase z JavaScriptem:
źródło
Najprostszym i lepszym sposobem dodania unikalnego identyfikatora do bazy danych ur według uwierzytelnionego użytkownika jest:
Interfejs użytkownika będzie unikalnym identyfikatorem dla określonego uwierzytelnionego e-maila / użytkownika
źródło