检查 firebase 数据库中是否存在值
Check if value exists in firebase DB
firebase有没有方法可以检查数据库中是否存在值? Firebase 有方法 .exists(),但根据文档,它只检查键。
我有以下结构:
{
"users": {
"-KKUmYgLYREWCnWeHCvO": {
"fName": "Peter",
"ID": "U1EL9SSUQ",
"username": "peter01"
},
"-KKUmYgLYREWCnWeHCvO": {
"fName": "John",
"ID": "U1EL5623",
"username": "john.doe"
}
}
}
我想检查值为 U1EL5623
的 ID 是否存在。
exists()
方法是 firebase 查询返回的 snapshot
对象的一部分。因此 请记住,您将无法避免检索数据以验证它是否存在。
ref.child("users").orderByChild("ID").equalTo("U1EL5623").once("value",snapshot => {
if (snapshot.exists()){
const userData = snapshot.val();
console.log("exists!", userData);
}
});
观察:
如果您处于不同的场景中,您拥有对象可能所在的确切引用路径,则不需要添加 orderByChild
和 equalTo
。在这种情况下,您可以直接获取对象的路径,因此它不需要来自 firebase 的任何搜索处理。此外,如果您知道对象必须具有的属性之一,您可以按照下面的代码片段进行操作,并使其仅检索此 属性 而不是整个对象。结果将是一个更快的检查。
//every user must have an email
firebase.database().ref(`users/${userId}/email`).once("value", snapshot => {
if (snapshot.exists()){
console.log("exists!");
const email = snapshot.val();
}
});
如果您想检查 firebase 中是否存在电子邮件,这是一个类似的解决方案
firebase.app().database().ref("shops").orderByChild("email")
.equalTo(user.email).once("value", snapshot => {
const userData = snapshot.val();
// Check if it is a SHOP.
if (userData) {
console.log("Shop logged in!");
this.setState({
isAdminLoggedIn: false,
isUserLoggedIn: false,
isShopLoggedIn: true,
isNoneLoggedIn: false
});
// Check if it is a USER.
} else {
console.log("User logged in");
this.setState({
isAdminLoggedIn: false,
isUserLoggedIn: true,
isShopLoggedIn: false,
isNoneLoggedIn: false
});
}
});
我还不能发表评论,所以我发布了一个答案:
添加到建议的答案中,如果您想查询是否存在任何用户,您可以尝试通过添加.limitToFirst(1) 或.limitToLast(1) 来提高性能。这样您就可以将检索到的数据限制在最低限度:
//Check if any users exist
firebase.database().ref(`users`).limitToFirst(1).once("value", snapshot => {
if (snapshot.exists()){
console.log("exists!");
// TODO: Handle that users do exist
return true;
}
// TODO: Handle that users do not exist
});
来源:https://firebase.google.com/docs/reference/js/firebase.database.Query#limitToFirst
这就是我在项目的 Firebasebase 数据库中搜索 url 值的方式:
const searchFirebase = (url, idx) =>
{
firebase
.app()
.database()
.ref("recipes")
.orderByChild("url")
.equalTo(url)
.once("value", (snapshot) => {
if (snapshot.exists()) {
const userData = snapshot.val();
console.log("exists!", userData);
document.querySelector(`[data-recipe-id="${idx}"]`)
.classList.replace('fav-heart', 'unfav-heart');
} else {
return false;
}
});
}
firebase有没有方法可以检查数据库中是否存在值? Firebase 有方法 .exists(),但根据文档,它只检查键。
我有以下结构:
{
"users": {
"-KKUmYgLYREWCnWeHCvO": {
"fName": "Peter",
"ID": "U1EL9SSUQ",
"username": "peter01"
},
"-KKUmYgLYREWCnWeHCvO": {
"fName": "John",
"ID": "U1EL5623",
"username": "john.doe"
}
}
}
我想检查值为 U1EL5623
的 ID 是否存在。
exists()
方法是 firebase 查询返回的 snapshot
对象的一部分。因此 请记住,您将无法避免检索数据以验证它是否存在。
ref.child("users").orderByChild("ID").equalTo("U1EL5623").once("value",snapshot => {
if (snapshot.exists()){
const userData = snapshot.val();
console.log("exists!", userData);
}
});
观察:
如果您处于不同的场景中,您拥有对象可能所在的确切引用路径,则不需要添加 orderByChild
和 equalTo
。在这种情况下,您可以直接获取对象的路径,因此它不需要来自 firebase 的任何搜索处理。此外,如果您知道对象必须具有的属性之一,您可以按照下面的代码片段进行操作,并使其仅检索此 属性 而不是整个对象。结果将是一个更快的检查。
//every user must have an email
firebase.database().ref(`users/${userId}/email`).once("value", snapshot => {
if (snapshot.exists()){
console.log("exists!");
const email = snapshot.val();
}
});
如果您想检查 firebase 中是否存在电子邮件,这是一个类似的解决方案
firebase.app().database().ref("shops").orderByChild("email")
.equalTo(user.email).once("value", snapshot => {
const userData = snapshot.val();
// Check if it is a SHOP.
if (userData) {
console.log("Shop logged in!");
this.setState({
isAdminLoggedIn: false,
isUserLoggedIn: false,
isShopLoggedIn: true,
isNoneLoggedIn: false
});
// Check if it is a USER.
} else {
console.log("User logged in");
this.setState({
isAdminLoggedIn: false,
isUserLoggedIn: true,
isShopLoggedIn: false,
isNoneLoggedIn: false
});
}
});
我还不能发表评论,所以我发布了一个答案:
添加到建议的答案中,如果您想查询是否存在任何用户,您可以尝试通过添加.limitToFirst(1) 或.limitToLast(1) 来提高性能。这样您就可以将检索到的数据限制在最低限度:
//Check if any users exist
firebase.database().ref(`users`).limitToFirst(1).once("value", snapshot => {
if (snapshot.exists()){
console.log("exists!");
// TODO: Handle that users do exist
return true;
}
// TODO: Handle that users do not exist
});
来源:https://firebase.google.com/docs/reference/js/firebase.database.Query#limitToFirst
这就是我在项目的 Firebasebase 数据库中搜索 url 值的方式:
const searchFirebase = (url, idx) =>
{
firebase
.app()
.database()
.ref("recipes")
.orderByChild("url")
.equalTo(url)
.once("value", (snapshot) => {
if (snapshot.exists()) {
const userData = snapshot.val();
console.log("exists!", userData);
document.querySelector(`[data-recipe-id="${idx}"]`)
.classList.replace('fav-heart', 'unfav-heart');
} else {
return false;
}
});
}