我正在研究React.js项目,试图在执行某些功能之前检查Firebase数据库中是否存在特定的电子邮件。
在此示例中,我从“用户”表中收到2封不同的电子邮件“ jonh@doe.com”和“ bob@ford.com”。每个用户都有一个特定的ID,例如:ZJ9SeEQviZdISg4zxWKzRLjsBXX2
-users
-ZJ9SeEQviZdISg4zxWKzRLjsBXX2
-infos
-lastname: "Doe"
-firstname: "John"
-email: "john@doe.com"
-DhDNNsk6dhdnDKllLnnBSVSVsXbs
-infos
-lastname: "Ford"
-firstname: "Bob"
-email: "bob@ford.com"
这是我的代码:
firebase.database().ref().child('users').orderByKey().once('value',
snap => {
snap.forEach(child => {
if("my@email.com" === child.val().email){
formIsValid = false;
}
...
我想检查“ my@email.com”是否存在,但我真的不知道该怎么做。我很确定这并不难...
非常感谢您的帮助! 值
答案 0 :(得分:0)
您不是通过正确的子属性查询。您需要像这样的东西L
ImplicitConversionDemo
3
这将通过子节点的firebase.database().ref().child('users').orderByChild('infos/email').equalTo('my@email.com')
.limitToFirst(1).once('child_added', snap => {
if("my@email.com" === snap.val().email){
formIsValid = false;
}
})
属性值对其进行排序,然后对其进行过滤。为了有效地运行它,您需要定义一个索引:
infos/email
作为一个额外的技巧,此代码使用{
"rules": {
"users": {
".indexOn: "infos/email"
}
}
}
和limitToFirst(1)
(而不是child_added
),因为您只关心匹配子项的存在。