2017-09-24 127 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" 
    } 
    } 
}