2017-03-04 78 views
0

我有以下結構火力地堡queryEqual(toValue :)不工作

"users":{ 
    "user1234" { 
     "username": "user1234" 
    } 
} 

我試圖做一個查詢找到與用戶名「user1234」用戶數據庫。當我使用queryEqual(toValue :)我沒有得到任何匹配,但是當使用queryStarting(atValue:)我得到用戶。我已確認用戶名實際上是「user1234」。我究竟做錯了什麼?

let query1 = databaseRef.child("users").queryOrdered(byChild:"username").queryStarting(atValue: "user1234").queryLimited(toFirst: 1) 
query1.observeSingleEvent(of: FIRDataEventType.value, with: { (snapshot) in 
    //snapshot contains the user with username "user1234" 
}) 

但是以下不起作用

let query2 = databaseRef.child("users").queryOrdered(byChild:"username").queryEqual(toValue: "user1234")  
query2.observeSingleEvent(of: FIRDataEventType.value, with: { (snapshot) in 
    //snapshot DOES NOT contain the user with username "user1234" 
}) 

我的安全規則

"rules": { 
    ".read": "true", 
    ".write": "true",  
    "users": { 
    "$uid": { 
     ".indexOn": ["username"], 
    }, 
    }, 
}, 
+0

你確定usernameLowered =「user1234」在第二個查詢嗎? –

+0

是的,這只是輸入問題的一個錯字。感謝您指出它 – Nilsymbol

回答

0

你面臨這個問題,因爲查詢會只有一個級別深,所以你需要拼合你的數據或你必須找出不同的方法。 在這裏你可以找到更多detailed answer.

+0

我的第一個查詢工作,而第二個查詢雖然他們在同一水平上,但沒有邏輯的原因,爲什麼深度應該改變我的情況 – Nilsymbol

+0

剛剛嘗試過,它工作正常。可能是你的索引有問題。你的安全規則是什麼樣的? – i6x86

+0

剛剛更新了我的安全規則問題 – Nilsymbol