Swift Firebase查询
问题描述:
我想抓住给他的电子邮件的uid。Swift Firebase查询
我有这样的:
let usersRef = Database.database().reference().child("users")
usersRef.queryOrdered(byChild: "email").queryStarting(atValue: email).queryEnding(atValue: email).observeSingleEvent(of: .value, with: { (snapshot) in
if let values = snapshot.value as? [String: Any]{
print(values)
}
})
而且我的数据库看起来如下:
用户
| - $ uid
| - 电子邮件:“某些电子邮件”
快照不返回任何内容。
此外,调试器告诉我:
使用未指定的指数。您的数据将在客户端下载并过滤。考虑加入“.indexOn”:‘电子邮件’在/用户您的安全规则获得更好的性能
我觉得我已经做到了这一点,像这样:
{
"rules": {
"users": {
".read": "auth != null",
"$uid": {
".write": "$uid === auth.uid",
".indexOn": ["email"]
}
但是,这并不工作,以及。像下面
答
你必须在你执行查询的位置来定义火力地堡数据库索引。因此,这比您目前拥有的水平高一级:
{
"rules": {
"users": {
".indexOn": ["email"],
".read": "auth != null",
"$uid": {
".write": "$uid === auth.uid",
}
}
}
}
答
变化:
{
"rules": {
"users": {
".read": "auth != null",
"$uid": {
".write": "$uid === auth.uid",
".indexOn": "email"
}
}
}
预期产量是多少?请说明查询的目的是什么? – 3stud1ant3
问题已更新。 – Latcie
试试这个:'usersRef.queryOrdered(byChild:“email”)。queryEqual(toValue:email).observeSingleEvent' – 3stud1ant3