2017-03-04 77 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