2016-11-07 10 views
18

Mam następującą strukturę na mojej bazy danych Firebase: firebase databaseFirebase wyszukiwanie według wartości dziecka

Chciałbym wyszukać użytkownika przez imię, nazwisko lub adres e-mail, ale jak mam klucz użytkownika w poziomie powyżej Nie wiem, jak mogę to osiągnąć. Robię i sesję administratora, aby nie mieć dostępu do klucza użytkownika.

Próbowałem:

let usersRef = firebase.database().ref('users'); 
usersRef.orderByValue().on("value", function(snapshot) { 
    console.log(snapshot.val()); 
    snapshot.forEach(function(data) { 
     console.log(data.key); 
    }); 
}); 

Ale to przynosi wszystkich użytkowników w bazie danych. Jakieś pomysły?

Odpowiedz

24

Możesz użyć equalTo(), aby znaleźć dziecko według wartości. W twoim przypadku przez name:

ref.child('users').orderByChild('name').equalTo('John Doe').on("value", function(snapshot) { 
    console.log(snapshot.val()); 
    snapshot.forEach(function(data) { 
     console.log(data.key); 
    }); 
}); 

można znaleźć cała dokumentacja here

+0

Czy to możliwe, aby osiągnąć jak system auto-complete? Na przykład, jeśli użytkownik wpisze "John", czy możesz wywołać funkcję orderByChild na podstawie trafności? – Epicality

+0

@ Egzotyczność, możesz użyć 'startAt()', aby zrobić coś podobnego do tego, o czym wspomniałeś. [Tutaj] (https://firebase.google.com/docs/database/web/lists-of-data#filtering_data) można znaleźć całą dokumentację. Ale po prostu wyszukaj jako 'equalTo()', ale tylko sprawdza, czy ciąg zaczyna się od wpisywania przez użytkowników. –

+0

Jak mogę uzyskać węzły, które mają dwa pola z wartościami logicznymi: które pierwsze pole lub drugie to "prawda"? –