2016-06-13 121 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