【问题标题】:firebase Error Consider adding ".indexOn":firebase 错误考虑添加“.indexOn”:
【发布时间】:2018-03-04 12:11:03
【问题描述】:

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

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

这是我的数据库结构

我的角色是

    {
  "rules": {
    ".read": true,
    ".write": true,
  }
}

在那之后我把我的角色换成了这个

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

此时我也无法读取数据,并且我在控制台中没有看到任何错误 这是我的快速代码

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)

    })

如何

【问题讨论】:

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


    【解决方案1】:

    *请研究 cmets 以了解问题的实际解决方式。

    试试这个,并在规则中使用相同的 Data(大写“D”)以及 Jen 建议的查询。

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

    试试这个

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

    而不是

    ref = Database.database().reference()
    

    【讨论】:

    • 我改变了我的角色,但我仍然无法阅读,也没有错误显示在控制台中
    • 您是否在此数据库参考中尝试过 Jen 的规则。并记住在任何地方都使用相同的“数据”。
    • 是的,我用大写的 D 试过了,但我还是看不懂,控制台没有错误
    • sorry not working when using ("date") in the side of () 想要发布角色时出现错误
    • 对不起,我的错误。不要使用那些大括号,只使用“日期”。
    【解决方案2】:

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

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

    我刚才自己测试了几个规则,发现它们是区分大小写的。

    【讨论】:

    • 亲爱的 jen 人,我也将其更改为 Data,但我无法读取任何内容,控制台中也没有错误
    • 您还尝试从子“数据”而不是“数据”中读取数据,因此您也需要在代码中进行更改。
    猜你喜欢
    • 1970-01-01
    • 2021-01-02
    • 2015-03-19
    • 2018-06-16
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 2014-06-23
    相关资源
    最近更新 更多