检查firebase数据库中是不是存在值

Posted

技术标签:

【中文标题】检查firebase数据库中是不是存在值【英文标题】:Check if value exists in firebase DB检查firebase数据库中是否存在值 【发布时间】:2016-10-20 23:17:29 【问题描述】:

firebase 中是否有一种方法可以检查数据库中是否存在值? Firebase 有方法 .exists(),但根据文档,它只检查键。

我有以下结构:


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

我想检查值为U1EL5623的ID是否存在。

【问题讨论】:

【参考方案1】:

exists() 方法是由 firebase 查询返回的 snapshot 对象的一部分。所以请记住,您将无法避免检索数据以验证其是否存在

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

观察:

如果您处于不同的场景中,您拥有对象可能所在的确切引用路径,则无需添加orderByChildequalTo。在这种情况下,您可以直接获取对象的路径,这样就不需要从 firebase 进行任何搜索处理。此外,如果您知道对象必须具有的属性之一,您可以像下面的 sn-p 那样进行操作,并使其仅检索此属性而不是整个对象。结果将是一个更快的检查。

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

【讨论】:

如何使用 angularfire2 做到这一点?? @Xvegas 你可以这样做:const dbRef = this.db.database.ref(); dbRef.child(childName).orderByChild(objKey).equalTo(keyToCheck).once('value', snapshot => // your code here ); orderByChild 部分非常重要。没有它,它对我不起作用。 如果不知道密钥“ID”,我该如何搜索? @Nikhil 未知或动态?如果您不知道要查找的密钥,您将无法检查它是否存在。 所以我的意思是在“KKUmYgLYREWCnWeHCvO”主题内,我想搜索任何值,比如“Peter”。我不在乎哪个键匹配【参考方案2】:

如果您想检查电子邮件是否存在于 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
              );
            
        );

【讨论】:

【参考方案3】:

我还不能制作cmets,所以我发布一个答案:

要添加到建议的答案,如果您想查询是否存在任何用户,您可以尝试通过添加 .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

【讨论】:

【参考方案4】:

这就是我在项目的 Firebasebase 数据库中搜索 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; 
         
       );


【讨论】:

以上是关于检查firebase数据库中是不是存在值的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 Unity 的 Firebase 数据库中是不是已存在键/值

Swift 3 + Firebase:检查数组内的值是不是存在?

检查用户名是不是已经存在:Swift、Firebase

Swift Firebase 检查值是不是存在

如何检查文件是不是存在于 Firebase 存储中?

通过firebase规则检查数据库中是不是存在相同的数据