检查子值是否存在-Firebase / React

时间:2018-11-30 22:30:03

标签: javascript reactjs firebase firebase-realtime-database

我正在研究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”是否存在,但我真的不知道该怎么做。我很确定这并不难...

非常感谢您的帮助! 值

1 个答案:

答案 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),因为您只关心匹配子项的存在。