我的Firebase数据库中有以下结构:
我想通过姓名,姓氏或电子邮件搜索用户,但由于我在上面的级别中有用户密钥,我不知道如何实现这一点。我正在进行管理员会话,因此无法访问用户密钥。
我试过了:
let usersRef = firebase.database().ref('users');
usersRef.orderByValue().on("value", function(snapshot) {
console.log(snapshot.val());
snapshot.forEach(function(data) {
console.log(data.key);
});
});
但它带来了数据库中的所有用户。有什么想法吗?
答案 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)
为避免令人意外的意外出现的警告:当您使用orderByChild
和equalTo
时,请不要忘记在数据(here's the doc)上添加索引
如果不这样做,客户端将下载所有点头并进行过滤,如果您的数据库不断扩展,这将变得非常昂贵。