web-dev-qa-db-fra.com

Recherche Firebase par valeur enfant

J'ai la structure suivante sur ma base de données Firebase: firebase database

Je voudrais rechercher un utilisateur par nom, nom de famille ou adresse électronique, mais comme j'ai la clé d'utilisateur du niveau ci-dessus, je ne sais pas comment y parvenir. Je suis en train de faire une session d'administrateur pour qu'il n'ait pas accès à la clé d'utilisateur.

J'ai essayé:

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

Mais cela amène tous les utilisateurs de la base de données. Des idées?

41
Barbara Brina

Vous pouvez utiliser equalTo() pour rechercher un enfant par valeur. Dans votre cas par 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);
    });
});

Le but de orderByChild() est de définir le champ que vous voulez filtrer/rechercher. equalTo() peut obtenir une chaîne, une valeur int et booléenne.

Peut également être utilisé avec des clés générées automatiquement (pushKey).

Vous pouvez trouver toute la documentation ici

70
Gerard Cuadras