【发布时间】:2020-10-19 00:05:20
【问题描述】:
我很难删除 Firebase 实时数据库中的节点。
这是我尝试过的,遵循delete node in firebase 和How to delete/remove nodes on Firebase:
1)
let chatRef = db.ref("/chats");
var query = chatRef.orderByChild("uid").equalTo(chatId);
query.on("child_added", (snapshot) => {
snapshot.ref.remove();
});
使用上面的代码,当我点击删除时,整个数据(所有节点,包括聊天)都被删除了。
2)
chatRef.limitToLast(1).once("value", (snapshot) => {
snapshot.forEach((deedSnapshot) => {
deedSnapshot.ref.remove();
});
});
我按预期完成了这项工作,但它只删除了 /chats 中的最后一个节点,我想指定要删除的 chat/uid。
3)
let chatRef = db.ref("/chats");
chatRef.child("5ZuZvUyByDcbteclgpM0t08beVn1").remove();
这根本没有导致任何事情发生。我在 try/catch 中有这个,单击“delete”导致尝试运行,但没有发现任何错误。数据库中什么也没发生。
4)
let chatRef = db.ref("/chats/MJy8cxO85ldEnDScsWZ");
chatRef.remove();
与上面的第 3 条结果相同 - 没有发生任何事情,并且在 try/catch 中没有发现任何错误。
更新:我尝试了以下操作,但这会删除整个 chats 数据,而不仅仅是我要删除的节点:
let chatRef = db.ref("/chats");
chatRef
.orderByChild("uid")
.equalTo(chatId)
.once("value")
.then(function (snapshot) {
snapshot.forEach((childSnapshot) => {
//remove each child
chatRef.child(childSnapshot.key).remove();
});
});
【问题讨论】:
-
您的第一次尝试看起来不错。我唯一要改变的是改用
.once("value", ...) -
谢谢菲尔!我找到stackoverflow.com/questions/40441625/… 并再次尝试了我的第一次尝试,稍微重写了它:``` let chatRef = db.ref("/chats"); chatRef .orderByChild("uid") .equalTo(chatId) .once("value") .then(function (snapshot) { snapshot.forEach((childSnapshot) => { //删除每个孩子 chatRef.child(childSnapshot.key )。消除(); }); }); ``` 但是,这会删除聊天中的全部数据,而不是单个节点。 ://
标签: javascript firebase firebase-realtime-database