Firebase规则中与indexOn有关的烦人问题

时间:2019-05-02 17:44:04

标签: swift firebase firebase-realtime-database firebase-security firebase-security-rules

我几乎已经阅读了每个StackOverflow答案,但是对于我的情况,它们都不起作用,因为这是一个常见问题。在Firebase中查询数据时,我的Xcode控制台发出非常常见的警告。该警告为Using an unspecified index. Your data will be downloaded and filtered on the client. Consider adding ".indexOn": "username" at /users to your security rules for better performance

我试图首先阅读Firebase文档,以准确地了解我在做什么以及其他答案,例如Why does this Firebase ".indexOn" not work?。下面,我提供了与消息提示完全相同的安全规则;在/ users上添加indexOn但没有成功。我还在下面提供了我的数据库用户节点和一个功能。

{
  "rules": {
     ".read": true,
     ".write": true,
    "users":{
             ".indexOn": "username"
             }
         }
     }

/ users中我的Firebase数据库为JSON格式

    "users":{
      "5LYUynelLTcL8Bg9WNWGXV34YIq2" {
         "email": "user1@gmail.com"
         "username": "user1"
         }
       "9srk307kzxOW7j6dNmMaac9eYPu2" {
         "email": "user2@gmail.com"
         "username": "user2"
     }

我在Swift中使用的函数

let ref = Database.database().reference().child("users").queryOrdered(byChild: "username").queryEqual(toValue: passedInFriendString)
    ref.observeSingleEvent(of: .value) { (snapshot) in
        print(snapshot)
        }

我不确定还要去哪里。任何关于这是否是查询我想要的正确格式的见解都会很棒!

1 个答案:

答案 0 :(得分:0)

我解决了!

我没有意识到的是,我的问题中的上述代码在/ users上添加了适当的索引定义后,确实成功打印了快照。我的问题是,如果要进一步访问我正在查询的用户名快照的数据,则需要遍历快照。看起来像这样

findViewById

感谢上面的弗兰克(Frank)指导我并确认我处在正确的轨道上。每当我需要获取数据时,我很高兴能学到一些新的高效方法。