2017-09-05 49 views
0

我在Android中擁有一個Firebase數據庫,其中我擁有「USERS」根,並且有多個用戶使用密鑰電子郵件ID。當電子郵件ID是Firebase中的密鑰時,查詢電子郵件ID的孩子,以檢查孩子是否存在

所以數據庫的模式是這樣的,並且數據庫使用電子郵件ID爲每個用戶主鍵:

{ 
 
    "USERS": 
 
    { "[email protected],COM" : 
 
     { "USERNAME": "abc", 
 
     "URL": "SOME_URL",... 
 
     } 
 
    } 
 
    { "[email protected],COM" : 
 
     { "USERNAME": "dfe", 
 
     "URL": "SOME_URL2",... 
 
     } 
 
    } 
 
    ....... 
 
    ....... 
 
    ....... 
 
}

現在的電子郵件ID作爲對各主鍵用戶。在電子郵件ID內是我想要做的查詢的用戶名密鑰。我想檢查用戶名是否存在? 所以通常的辦法做到這一點是有一個數據庫參考 - 像這個 -

DatabaseReference mDBRef = FirebaseDatabase.getInstance().getReference("/USERS/" + ???? + "/USERNAME"); 

然後在數據庫中添加引用值事件偵聽器。在dataSnapshot檢查它是否存在 -

dataSnapshot.exists() 

現在我不知道在「USERS」後面追加什麼。此外,我希望數據庫查詢搜索用戶名儘可能高效。什麼可能是迭代通過電子郵件ID並檢查電子郵件ID的子鍵是否存在的可能方式?

回答

0

可以過濾使用orderByChild結果()函數

databasereference.orderByChild("USERNAME").equal("whatever") 

爲了得到充分的表現在火力數據庫規則

rules{ 
    //other rules 
    "USERS":{ 
     ".indexOn":["USERNAME"] 
    } 
} 
+0

是的,但在此之前,加.indexOn屬性,我需要遍歷在用戶名的父母身上,這是電子郵件ID。而且我不知道該怎麼做,因爲電子郵件ID是關鍵。 – Aman

+0

爲什麼你需要刺激?該查詢將僅返回所需用戶名的結果。 –

+0

如果沒有結果,那就意味着用戶名不存在,否則你將得到一個datasnapsot,並且可以通過datasnapsot.getKey()提取電子郵件ID() –