如何在 React 中将 Firebase 实时数据库中的数据写入为 [自定义键:值]?
How to write data in Firebase Realtime Database as [custom key : value] in React?
我想要实现的是在 Firebase 实时数据库的专用节点中拥有随机 ID,同时能够在写入之前检查节点中是否已经存在 ID 以防止重复。
我正在使用 Web React (JavaScript)。
数据库目前是这样的:
我的目标是让另一个节点具有以下格式的 ID:
注意:在'users'节点中生成的ID与在'ids'中生成的ID不同,它们没有连接。
[key : value] 对中的 ID 键,例如 'abcd',不应由 Firebase 生成(如 push() 方法那样)。
相反,ID 是在写入数据之前单独生成的。
到目前为止,我发现了一些具有类似问题的资源,但它们要么与具有另一种语法的不同平台相关,要么已过时。
我当前从 'ids' 节点读取 ID 的代码似乎可以正常工作,如果带有 ID 的节点是在数据库控制台中手动创建的,但看来我仍然需要代码写入数据方面的帮助以所需的格式。
这是读取数据的代码:
function checkIdDuplicity(id)
{
const database = getDatabase();
get(child(ref(database), 'ids/'))
.then((snapshot) => {
if (snapshot.exists()) {
// Snapshot exists, find possible duplicate
if (snapshot.hasChild(id)) {
// Such ID is already in database
console.log("ID already exists");
return true;
}
else {
// ID is unique
return false;
}
}
else {
// No IDs in database, node shall be created
return false;
}
})
.catch((error) => {
console.log(error);
});
}
有人有什么想法吗?
要添加带有自定义键的节点,您需要使用 set()
而不是 push()
。
const nodeRef = child(ref(database), "ids/" + id); // id = custom ID you want to specify
await set(nodeRef, { ...data })
此外,您正在下载整个 ids/
节点以检查给定 ID 是否存在。相反,您可以只下载该特定 ID:
// specify the custom ID to check for in ref
get(child(ref(database), 'ids/' + id)) .then((snapshot) => {
if (snapshot.exists()) {
console.log("ID already exists in database")
} else {
console.log("ID does not exist in database")
}
})
我想要实现的是在 Firebase 实时数据库的专用节点中拥有随机 ID,同时能够在写入之前检查节点中是否已经存在 ID 以防止重复。
我正在使用 Web React (JavaScript)。
数据库目前是这样的:
我的目标是让另一个节点具有以下格式的 ID:
注意:在'users'节点中生成的ID与在'ids'中生成的ID不同,它们没有连接。
[key : value] 对中的 ID 键,例如 'abcd',不应由 Firebase 生成(如 push() 方法那样)。
相反,ID 是在写入数据之前单独生成的。
到目前为止,我发现了一些具有类似问题的资源,但它们要么与具有另一种语法的不同平台相关,要么已过时。
我当前从 'ids' 节点读取 ID 的代码似乎可以正常工作,如果带有 ID 的节点是在数据库控制台中手动创建的,但看来我仍然需要代码写入数据方面的帮助以所需的格式。
这是读取数据的代码:
function checkIdDuplicity(id)
{
const database = getDatabase();
get(child(ref(database), 'ids/'))
.then((snapshot) => {
if (snapshot.exists()) {
// Snapshot exists, find possible duplicate
if (snapshot.hasChild(id)) {
// Such ID is already in database
console.log("ID already exists");
return true;
}
else {
// ID is unique
return false;
}
}
else {
// No IDs in database, node shall be created
return false;
}
})
.catch((error) => {
console.log(error);
});
}
有人有什么想法吗?
要添加带有自定义键的节点,您需要使用 set()
而不是 push()
。
const nodeRef = child(ref(database), "ids/" + id); // id = custom ID you want to specify
await set(nodeRef, { ...data })
此外,您正在下载整个 ids/
节点以检查给定 ID 是否存在。相反,您可以只下载该特定 ID:
// specify the custom ID to check for in ref
get(child(ref(database), 'ids/' + id)) .then((snapshot) => {
if (snapshot.exists()) {
console.log("ID already exists in database")
} else {
console.log("ID does not exist in database")
}
})