firebase错误考虑添加" .indexOn":

时间:2017-09-22 20:28:59

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

我在swift中使用firebase从firebase实时数据库中读取一些数据。当我在firebase面板中有一个项目时它的工作正常,但是在今天添加另一个项目之后我得到了这样的错误

  

2017-09-23 00:15:18.360 AfgDate [2816] [Firebase / Database] [I-RDB034028]使用未指定的索引。您的数据将在客户端上下载和过滤。考虑添加" .indexOn":" date" at / data to your security rules以获得更好的性能

这是我的数据库结构 enter image description here

我的角色是

    {
  "rules": {
    ".read": true,
    ".write": true,
  }
}
之后我把角色改成了这个

  {
"rules": {
    "data": {
      ".indexOn": "date",
        ".read": true,
        ".write": true
    }
  }
}

在这个时候我也无法读取数据,而且我没有在控制台中看到任何错误 这是我在swift中的代码

ref = Database.database().reference()
    ref.child("data").queryOrdered(byChild: "date").queryEqual(toValue: "1396/06/05").observeSingleEvent(of: .value, with: { (snapShot) in
        if let snapDict = snapShot.value as? [String:AnyObject]{

            for each in snapDict{
                let key  = each.key as String
                let date = each.value["date"] as!String
                let name = each.value["text"] as! String
                print(key)
                print(name)
                self.lblshow.text = name
            }
        }
    }, withCancel: {(Err) in

        print(Err.localizedDescription)

    })

如何

2 个答案:

答案 0 :(得分:2)

您的数据库图片显示为Data为大写,但.indexOn data不是。你希望你的规则是这样的:

{
"rules": {
    "Data": {
      ".indexOn": "date",
        ".read": true,
        ".write": true
    }
  }
}

我刚刚测试了一些规则,发现它们区分大小写。

答案 1 :(得分:1)

  

请研究评论以了解问题是如何解决的。

尝试此操作,并在规则和Jen建议的查询中使用相同的Data(使用大写" D")。

 {
    "rules": {
         ".read": true,
         ".write": true,    
         "Data" : {
             ".indexOn": "date"
         }

        }
    }

试试这个

var ref: FIRDatabaseReference!
ref = FIRDatabase.database().reference()

而不是

ref = Database.database().reference()