简体   繁体   中英

How to delete a node in firebase realtime database in javascript

I'm having a difficult time deleting a node in a firebase realtime database.

This is what my firebase realtime database looks like: 在此处输入图像描述

This is what I tried, following delete node in firebase and 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();
      });

With the above code, when I clicked to delete the entire data (all of the nodes, including chat) was deleted.

2)

      chatRef.limitToLast(1).once("value", (snapshot) => {
        snapshot.forEach((deedSnapshot) => {
          deedSnapshot.ref.remove();
        });
      });

I got this working as intended, but it only removes the last node in /chats, and I want to specify the chat/uid I want to remove.

3)

      let chatRef = db.ref("/chats");
      chatRef.child("5ZuZvUyByDcbteclgpM0t08beVn1").remove();

This simply caused nothing to happen. I had this in a try/catch, and clicking on "delete" led to the try running, but no errors were caught. And nothing happened in the database.

4)

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

Same outcome as number 3 above -- nothing happened, and no errors were caught in the try/catch.

UPDATE: I tried the following, but this removes the entire chats data instead of only the node I want deleted:

      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();
          });
        });

Your fourth example should work, except you have a typo:

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

It should instead be:

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

You're missing the "-" before "M".

I am bit late to the party. Just like to suggest another way.

To remove a node we can pass null as a value in 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.');
      }
    });

To remove a node in realtime database First import remove from database

import { remove } from "firebase/database";

And in the delete methode you set:

remove(ref(getDatabase(), `users/${userId}/node/${node.id}`))

Thanks !

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM