檢查 firebase 資料庫中是否存在值
P粉354602955
P粉354602955 2023-08-27 19:51:39
0
2
363

firebase中有沒有一種方法可以檢查資料庫中是否存在值? Firebase 有方法 .exists(),但根據文件它只檢查鍵。

我有以下結構:

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

我想檢查值為 U1EL5623 的 ID 是否存在。

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
      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!