【问题标题】:How to delete a node in firebase realtime database in javascript如何在javascript中删除firebase实时数据库中的节点
【发布时间】:2020-10-19 00:05:20
【问题描述】:

我很难删除 Firebase 实时数据库中的节点。

这就是我的 firebase 实时数据库的样子:

这是我尝试过的,遵循delete node in firebaseHow 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


【解决方案1】:

你的第四个例子应该可以工作,除了你有一个错字:

let chatRef = db.ref("/chats/MJy8cxO85ldEnDScsWZ");

应该是:

let chatRef = db.ref("/chats/-MJy8cxO85ldEnDScsWZ");

您在“M”之前缺少“-”。

【讨论】:

  • 太棒了,谢谢!你是对的,我没有意识到 -M 是字符串的一部分。你知道是否有一种简单的方法可以根据uid(例如5ZuZvUyByDcbteclgpM0t08beVn1)的值来检索密钥(例如-MJy8cxO85ldEnDScsWZ)?
  • 当然,您应该了解如何按照文档中的说明执行过滤器查询。 firebase.google.com/docs/database/web/…
【解决方案2】:

我参加聚会有点晚了。只是想建议另一种方式。

要删除节点,我们可以将 null 作为值传递给 set

import { database } from 'firebase-admin';

    const db = database();
        const ref = db.ref('server/saving-data/fireblog');
    
        dataRef.set(null, (error) => {
      if (error) {
        console.log('Data could not be removed.' + error);
      } else {
        console.log('Data removed successfully.');
      }
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    相关资源
    最近更新 更多