Firebase按子值搜索

时间:2016-11-07 17:42:49

标签: javascript firebase firebase-realtime-database

我的Firebase数据库中有以下结构: firebase database

我想通过姓名,姓氏或电子邮件搜索用户,但由于我在上面的级别中有用户密钥,我不知道如何实现这一点。我正在进行管理员会话,因此无法访问用户密钥。

我试过了:

let usersRef = firebase.database().ref('users');
usersRef.orderByValue().on("value", function(snapshot) {
    console.log(snapshot.val());
    snapshot.forEach(function(data) {
        console.log(data.key);
    });
});

但它带来了数据库中的所有用户。有什么想法吗?

2 个答案:

答案 0 :(得分:65)

您可以使用equalTo()按值查找任何子项。在您的情况下,name

ref.child('users').orderByChild('name').equalTo('John Doe').on("value", function(snapshot) {
    console.log(snapshot.val());
    snapshot.forEach(function(data) {
        console.log(data.key);
    });
});

orderByChild()的目的是定义您要过滤/搜索的字段。 equalTo()可以获得字符串,整数和布尔值。

也可以与自动生成的密钥(pushKey)一起使用。

您可以找到所有文档here

答案 1 :(得分:1)

为避免令人意外的意外出现的警告:当您使用orderByChildequalTo时,请不要忘记在数据(here's the doc)上添加索引

如果不这样做,客户端将下载所有点头并进行过滤,如果您的数据库不断扩展,这将变得非常昂贵。