Firechild v3由Grandchild查询

时间:2016-07-21 22:07:50

标签: javascript firebase firebase-realtime-database

在注册新的电子邮件/密码类型用户时,我需要让用户在调用displayName之前,我的实时数据库中尚未存在他们输入的.createUserWithEmailAndPassword。所以我需要一个查询。我需要获取displayName分支中所有users的列表。我很困惑如何为每个用户auth.uid表示的每个user收集这个。

检索结果如何?我想的是:

firebase.database().ref('users/' + allUserIds).equalTo('Joe');

但我知道allUserIds无效。有人可以帮我这个吗?

{
  "users" : {
    "6mJb9vtpbDelyyjirKEf6sSEj8h1" : {
      "name" : "asdfs@asdf.com",
      "provider" : "password",
      "displayName" : "Joe"
    },
    "T7D7qEOPPHXjKSzglKheGJDQNkE3" : {
      "name" : "gfdsdf@hlkjh.com",
      "provider" : "password",
      "displayName" : "Jane"
    },
    "kTG9R0V4aXYsogQfgF633KFYtzV2" : {
      "name" : "Andre3000",
      "provider" : "google.com",
      "displayName" : "Andre"
    }
  }
}

2 个答案:

答案 0 :(得分:2)

您可以使用Firebase查询:

var users = firebase.database().ref('users');
var joes = users.orderByChild('displayName').equalTo('Joe');
joes.once('value', function(snapshot) {
  console.log('A Joe does '+(snapshot.exists()?'':'not ')+' exist')
});

不要忘记在users上定义索引:

{
  "rules": {
    "users": {
      ".indexOn": "displayName"
    }
  }
}

答案 1 :(得分:0)

我想我会分享一些有点充实的解决方案。致电myApp.displayNameExists('Joe')

var myApp = (function() {
    var pub = {};
    pub.displayNameExists = function(name) {
            var users = firebase.database().ref('users');
            var duplicate = users.orderByChild('displayName').equalTo(name);
            duplicate.once('value').then(function(snap) {
                if (snap.val()) {
                    console.log('found. ask for new display name');
                } else {
                    console.log('name unique.  ok to write this user to db');
                }
            }, function(error) {
                // The Promise was rejected.
                console.error(error);
            });
        }
        //API
    return pub;
}());