2017-09-24 128 views
0

我想抓住给他的电子邮件的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"] 
    } 

但是,这并不工作,以及。像下面

+0

预期产量是多少?请说明查询的目的是什么? – 3stud1ant3

+0

问题已更新。 – Latcie

+1

试试这个:'usersRef.queryOrdered(byChild:“email”)。queryEqual(toValue:email).observeSingleEvent' – 3stud1ant3

回答

1

你必须在你执行查询的位置来定义火力地堡数据库索引。因此,这比您目前拥有的水平高一级:

{ 
    "rules": { 
    "users": { 
     ".indexOn": ["email"], 
     ".read": "auth != null", 
     "$uid": { 
     ".write": "$uid === auth.uid", 
     } 
    } 
    } 
} 
0

变化:

{ 
    "rules": { 
    "users": { 
     ".read": "auth != null", 
     "$uid": { 
     ".write": "$uid === auth.uid", 
     ".indexOn": "email" 
    } 
    } 
}