我有一个数据库,结构如下

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

我正在尝试查询以查找用户名为“user1234”的用户。当我使用queryqual(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"],
     },
   },
 },

最佳答案

您正面临这个问题,因为查询只深入到一个层次,所以您需要扁平化您的数据,或者您必须找出不同的方法。
在这里您可以找到更多detailed answer.

09-04 00:06