2016-06-13 116 views
2

我想找到一種方法,我可以在我的應用程序中查詢用戶。例如,如果我的用戶想要搜索用戶以將其添加爲朋友。我想我可以將所有用戶保存在Firebase數據庫中,然後在數據庫中執行查詢,但看起來效率很低(並且必須有一個更簡單的內置方法才能完成)。firebase swift - 用戶查詢

+0

爲什麼效率低下?如果您有用戶列表並且您想執行搜索,則查詢必須由某人進行。魔術師不存在:D – lubilis

+1

你總是可以猜到,如果你是正確的,每次都是O(1) – rigdonmr

+0

我的問題是如果有用戶查詢,就像解析中的一個你可以創建查詢找到一個用戶(使用ID,用戶名或電子郵件)。這是否存在於Firebase中,或者是否需要將所有用戶放在實時數據庫中,然後在此數據庫中進行查詢。 –

回答

0

「.indexOn」是您的解決方案!

如果你構造你的日期如下,你將能夠查詢用戶!在這裏您可以在full_name和reversed_full_name上查詢用戶。你可以提供你想要查詢的任何一個孩子。例如,您可以在人員下添加電子郵件字段,然後在「.indexOn」中添加「電子郵件」!

"people": { 
    ".indexOn": ["_search_index/full_name", "_search_index/reversed_full_name"], 
    ".read": true, 
    "$uid": { 
    ".write": "auth.uid === $uid", 
    "full_name": { 
     ".validate": "newData.isString()" 
    }, 
    "profile_picture": { 
     ".validate": "newData.isString()" 
    }, 
    "posts": { 
     "$postId": { 
     ".validate": "newData.val() === true && newData.parent().parent().parent().parent().child('posts').child($postId).exists()" 
     } 
    }, 
    "_search_index": { 
     "full_name": { 
     ".validate": "newData.isString()" 
     }, 
     "reversed_full_name": { 
     ".validate": "newData.isString()" 
     } 
    }, 
    "following": { 
     "$followedUid": { 
     ".validate": "newData.parent().parent().parent().parent().child('followers').child($followedUid).child($uid).val() === true" // Makes sure /followers is in sync 
     } 
    } 
    } 

希望這會有所幫助。以下是從Firebase提供的整個安全規則的鏈接https://github.com/firebase/friendlypix/blob/master/web/database-rules.json