gpt4 book ai didi

javascript - 如何构造 Firebase 实时数据库读取请求 : Order by Key's Child

转载 作者:行者123 更新时间:2023-12-03 00:44:00 26 4
gpt4 key购买 nike

我将数据按以下格式存储在 Firebase 实时数据库中。

users:
-L5ZAb7r10_nqss7Ag:
role: "user"
email: "person@example.com"
username: "King Arthur"
-KL3Abnar7_nals8:
role: "admin"
email: "other@example.com"
username: "Queen Ferdinand"

database.rules.json中我有:

"users":{
".indexOn":["email"],
".write": false,
".read": "auth != null"
},

在前端,我有一个用户提供了他们的电子邮件,已经通过 Google OAuth 进行了身份验证,我想查看他们的电子邮件是否是有效用户,如果是,则返回他们的 Angular 色和用户名,否则抛出错误。现在,我遍历“n”个帐户并检查每个帐户的电子邮件。 O(n) 显然是一个非常糟糕的运行时。

不知道数据库中用户的 key 是什么(“-L5ZAb7r10_nqss7Ag”部分),我希望能够通过在索引数据库中搜索电子邮件来在 O(1) 中检查给定的电子邮件。我的想法如下。如果这是可能的,有人可以指出我正确的文档以获取正确的语法吗?

firebase.database().ref(`/users/`).getIndexedValue($key/person@example.com).once('value').then(function(snap){
if(snap == null) console.log("error);
else{
user = snap.val();
console.log(user[role]);
console.log(user[username]);
}
}

我知道上面的方法行不通,.getIndexedValue() 不是真的。此功能的正确语法是什么?有没有办法查找位于任意部分(-KL3Abnar7_nals8)下方的特定索引值(电子邮件)?

最佳答案

您正在寻找 orderByChild()equalTo()。像这样的事情:

firebase.database()
.ref('users')
.orderByChild('email')
.equalTo('person@example.com')
.once('value').then(function(snapshot){
if (snapshot.exists()) {
snapshot.forEach(function(snap) {
user = snap.val();
console.log(user[role]);
console.log(user[username]);
})
}
}

要详细了解 Firebase 数据库查询,请参阅 documentation on sorting and filtering data 。我还建议检查一些以前的 questions on the topic .

关于javascript - 如何构造 Firebase 实时数据库读取请求 : Order by Key's Child,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53322372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com