搜索

首页  >  问答  >  正文

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

<p>firebase中有没有一种方法可以检查数据库中是否存在值? Firebase 有方法 .exists(),但根据文档它只检查键。</p> <p>我有以下结构:</p> <pre class="brush:php;toolbar:false;">{ "users": { "-KKUmYgLYREWCnWeHCvO": { "fName": "Peter", "ID": "U1EL9SSUQ", "username": "peter01" }, "-KKUmYgLYREWCnWeHCvO": { "fName": "John", "ID": "U1EL5623", "username": "john.doe" } } }</pre> <p>我想检查值为 <code>U1EL5623</code> 的 ID 是否存在。</p>
P粉354602955P粉354602955488 天前456

全部回复(2)我来回复

  • P粉364642019

    P粉3646420192023-08-28 16:24:26

    如果您想检查 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
                  });
                }
            });

    回复
    0
  • P粉125450549

    P粉1254505492023-08-28 13:53:22

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

    // Firebase Namespaced SDK (v8 & older)
    // import firebase as appropriate
    
    const userQueryByID = firebase.database()
      .ref("users")
      .orderByChild("ID")
      .equalTo("U1EL5623");
    
    // using a snapshot listener
    userQueryByID
      .once(
        "value",
        snapshot => {
          if (snapshot.exists()){
            const userData = snapshot.val();
            console.log("exists!", userData);
          }
        }
      );
    
    // OR, using a promise
    userQueryByID.get()
      .then(snapshot => {
        if (snapshot.exists()){
          const userData = snapshot.val();
          console.log("exists!", userData);
        }
      });
    // Firebase Modular SDK (v9+)
    // import each function from "firebase/database"
    
    const rtdb = getDatabase();
    const userQueryByID = query(
      ref(rtdb, "users"),
      orderByChild("ID"),
      equalTo("U1EL5623")
    );
    
    // using a snapshot listener
    onValue(
      userQueryByID,
      snapshot => {
        if (snapshot.exists()){
          const userData = snapshot.val();
          console.log("exists!", userData);
        }
      },
      { onlyOnce: true }
    );
    
    // OR, using a promise
    get(userQueryByID)
      .then(snapshot => {
        if (snapshot.exists()){
          const userData = snapshot.val();
          console.log("exists!", userData);
        }
      });

    观察结果:

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

    例如,如果每个用户的数据中都有一个用户名,您可以使用这些:

    // Firebase Namespaced SDK (v8 & older)
    // import firebase as appropriate
    
    const usernameRef = firebase.database()
      .ref(`users/${userId}/username`);
    
    // using a snapshot listener
    usernameRef
      .once(
        "value",
        snapshot => {
          if (snapshot.exists()){
            const username = snapshot.val();
            console.log("exists!", username);
          }
        }
      );
    
    // OR, use usernameRef.get() for a promise, as above
    // Firebase Modular SDK (v9+)
    // import each function from "firebase/database"
    
    const rtdb = getDatabase();
    const usernameRef = ref(rtdb, `users/${userId}/username`);
    
    // using a snapshot listener
    onValue(
      usernameRef,
      snapshot => {
        if (snapshot.exists()){
          const username = snapshot.val();
          console.log("exists!", username);
        }
      },
      { onlyOnce: true }
    );
    
    // OR, use get(usernameRef) for a promise, as above

    回复
    0
  • 取消回复