programing

Firebase DB에 값이 있는지 확인합니다.

easyjava 2023. 6. 13. 22:54
반응형

Firebase DB에 값이 있는지 확인합니다.

DB에 값이 존재하는지 확인할 수 있는 firebase 방법이 있습니까?Firebase에는 .exist() 메서드가 있지만 문서에 따라 키만 확인합니다.

저는 다음과 같은 구조를 가지고 있습니다.

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

값이 있는 ID인지 확인하고 싶습니다.U1EL5623존재한다.

exists()방법은 의 일부입니다.snapshot파이어베이스 쿼리에 의해 반환되는 개체입니다.따라서 데이터의 존재 여부를 확인하기 위해 데이터를 검색하지 않을 없습니다.

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

관측치:

개체가 있을 수 있는 정확한 참조 경로가 있는 다른 시나리오에 있는 경우 추가할 필요가 없습니다.orderByChild그리고.equalTo이 경우 개체의 경로를 직접 가져와 방화벽에서 검색 처리를 수행할 필요가 없습니다.또한 개체에 필요한 속성하나를 알고 있는 경우 아래의 스니펫처럼 개체 전체가 아닌 속성만 검색할 수 있습니다. 결과는 훨씬 더 빠른 확인이 될 것입니다.

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

파이어베이스에 전자 메일이 있는지 확인하려는 경우에도 이와 유사한 솔루션입니다.

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

아직 댓글을 달 수가 없어서 이렇게 답변을 올립니다.

제안된 답변에 추가하려면 사용자가 있는지 여부를 쿼리하려면 .limitToFirst(1) 또는 .limitToLast(1)를 추가하여 성능을 향상시킬 수 있습니다.이렇게 하면 검색된 데이터를 최소로 제한할 수 있습니다.

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

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

프로젝트의 Firebase 데이터베이스에서 URL 값을 검색한 방법은 다음과 같습니다.


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

언급URL : https://stackoverflow.com/questions/37910008/check-if-value-exists-in-firebase-db

반응형