web-dev-qa-db-fra.com

Vérifier si la valeur existe dans la base de données firebase

Existe-t-il une méthode dans Firebase permettant de vérifier si une valeur existe dans DB? Firebase a la méthode .exists () , mais selon docs, il ne vérifie que les clés.

J'ai la structure suivante:

{
  "users": {
    "-KKUmYgLYREWCnWeHCvO": {
      "fName": "Peter",
      "ID": "U1EL9SSUQ",
      "username": "peter01"
    },
    "-KKUmYgLYREWCnWeHCvO": {
      "fName": "John",
      "ID": "U1EL5623",
      "username": "john.doe"
    }
  }
}

Je veux vérifier si l'ID avec la valeur U1EL5623existe.

25
Gabriel

La méthode exists() fait partie de l’objet snapshot qui est renvoyé par les requêtes firebase. Alors gardez à l'esprit que vous ne pourrez pas éviter de récupérer les données pour vérifier si elles existent ou non.

ref.child("users").orderByChild("ID").equalTo("U1EL5623").once("value",snapshot => {
    if (snapshot.exists()){
      const userData = snapshot.val();
      console.log("exists!", userData);
    }
});

Observations:

Si vous êtes dans un scénario différent et que vous avez le chemin de référence exact où l'objet peut se trouver, vous n'aurez pas besoin d'ajouter orderByChild et equalTo. Dans ce cas, vous pouvez extraire directement le chemin d'accès à l'objet pour qu'il ne nécessite aucun traitement de recherche à partir de firebase. En outre, si vous connaissez l'une des propriétés que doit posséder l'objet, vous pouvez utiliser le fragment ci-dessous et lui demander d'extraire uniquement cette propriété et non l'objet entier. Le résultat sera un contrôle beaucoup plus rapide.

//every user must have an email
firebase.database().ref(`users/${userId}/email`).once("value", snapshot => {
   if (snapshot.exists()){
      console.log("exists!");
      const email = snapshot.val();
    }
});
42
adolfosrs

C'est une solution similaire si vous voulez vérifier si un email existe dans firebase

firebase.app().database().ref("shops").orderByChild("email")
   .equalTo(user.email).once("value", snapshot => {

            const userData = snapshot.val();

            // Check if it is a SHOP.
            if (userData) {
              console.log("Shop logged in!");
              this.setState({
                isAdminLoggedIn: false,
                isUserLoggedIn: false,
                isShopLoggedIn: true,
                isNoneLoggedIn: false
              });

            // Check if it is a USER.
            } else {
              console.log("User logged in");
              this.setState({
                isAdminLoggedIn: false,
                isUserLoggedIn: true,
                isShopLoggedIn: false,
                isNoneLoggedIn: false
              });
            }
        });
2
Riccardo Persiani

Je ne peux pas encore faire de commentaires, alors je poste une réponse:

Pour ajouter à la réponse suggérée, si vous souhaitez savoir s'il existe ou non des utilisateurs, vous pouvez essayer d'améliorer les performances en ajoutant .limitToFirst (1) ou .limitToLast (1). De cette façon, vous pouvez limiter vos données récupérées au minimum:

//Check if any users exist
firebase.database().ref(`users`).limitToFirst(1).once("value", snapshot => {
   if (snapshot.exists()){
      console.log("exists!");
      // TODO: Handle that users do exist
      return true;
   }

   // TODO: Handle that users do not exist
});

sources: https://firebase.google.com/docs/reference/js/firebase.database.Query#limitToFirst

0
Mark Thompson