我在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以获得更好的性能
这是我的数据库结构
我的角色是
{
"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)
})
如何
答案 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()