在我的应用程序中,我需要查找联系信息数据的功能,以检查用户是否已存在于我的数据库中。由于用户可能有多个电子邮件地址,因此我将此数据存储在名为ContactInfo
的单独类中。
现在,我想查询所有对象,并检查
emails
内的ContactInfo
数组中是否包含电子邮件。因此,我使用电子邮件作为密钥,这就是为什么它的URL编码。但是,我无法找到正确的查询来实现这一目标。
CONTACTINFO
基于我的数据库的顶层看起来像这样
答案 0 :(得分:2)
使用电子邮件地址作为密钥可能不是您想要做的。
电子邮件地址发生变化并被视为动态数据 - 最佳做法是不使用动态数据(可能会发生变化)作为关键,就像它确实发生变化一样,数据库中引用的任何地方都必须更新。
一种可能性是存储多个电子邮件:
contactInfo
-KYd3pbZ7D--yX6B3HY8
firstname: "John"
lastname: "Doe"
main_email: "-JYJkjajisaiisd"
然后是所有电子邮件的单独节点。
contact_emails
-JYJkjajisaiisd
email : "john@gmail.com"
uid : "uid_0"
-YJNlkokaosomdo
email : "john@hotmail.com",
uid : "uid_0"
-Juiaisidiasda
email : "frank@fmail.com",
uid : "uid_3"
此结构具有查询性,可维护性,并且无需担心将特殊字符(电子邮件字符)解析/存储为密钥。您可以为每个人存储多封电子邮件,只需更新其contactInfo中的main_email节点即可更改其主电子邮件
要检查电子邮件,请使用此查询
contactEmailsRef.queryOrdered(byChild:"email")
.queryEqual(toValue: "john@hotmail.com")
.observeSingleEvent(of: .value, with: { snapshot in
print(snapshot)
})
将导致打印此节点
-YJNlkokaosomdo
email : "john@hotmail.com",
uid : "uid_0"