检查 firebase 数据库中是否存在值
P粉354602955
P粉354602955 2023-08-27 19:51:39
0
2
454
<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粉354602955
P粉354602955

全部回复(2)
P粉364642019

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

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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板