Check if value exists in firebase DB

JavascriptFirebaseFirebase Realtime-Database

Javascript Problem Overview


Is there a method in firebase, which can check if value exist in DB? Firebase has method .exists(), but according to docs it checks only the keys.

I have the following structure:

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

I want to check if ID with value U1EL5623exists.

Javascript Solutions


Solution 1 - Javascript

The exists() method is part of the snapshot object which is returned by firebase queries. So keep in mind that you won't be able to avoid retrieving the data to verify if it exists or not.

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

Observations:

In case you are in a different scenario which you have the exact ref path where the object might be, you wont need to add orderByChild and equalTo. In this case, you can fetch the path to the object directly so it wont need any search processing from firebase. Also, if you know one of the properties the object must have you can do as the snippet below and make it retrieve just this property and not the entire object. The result will be a much faster check.

//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();
   }
});

Solution 2 - Javascript

This is a similar solution if you want to check if an email exists in 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
              });
            }
        });

Solution 3 - Javascript

I can't make comments yet, so I'm posting an answer:

To add to the suggested answer, if you wanted to query whether or not any users exist, you can try to improve performance by adding .limitToFirst(1) or .limitToLast(1). This way you can limit your retrieved data to the 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

Solution 4 - Javascript

This is how I searched for a url value in Firebasebase database on my project:


const searchFirebase = (url, idx) => 
{
     firebase
       .app()
       .database()
       .ref("recipes")
       .orderByChild("url")
       .equalTo(url)
       .once("value", (snapshot) => {
         if (snapshot.exists()) {
           const userData = snapshot.val();
           console.log("exists!", userData);
           document.querySelector(`[data-recipe-id="${idx}"]`)
           .classList.replace('fav-heart', 'unfav-heart'); 
         } else {
           return false; 
         }
       });
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRuntime TerrorView Question on Stackoverflow
Solution 1 - JavascriptadolfosrsView Answer on Stackoverflow
Solution 2 - JavascriptRiccardo PersianiView Answer on Stackoverflow
Solution 3 - JavascriptMark ThompsonView Answer on Stackoverflow
Solution 4 - Javascriptbqh5026View Answer on Stackoverflow