7

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

This is what my firebase realtime database looks like: enter image description here

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();
          });
        });
2
  • Your first attempt looks about right. The only thing I'd change is to use .once("value", ...) instead Commented Oct 19, 2020 at 0:31
  • Thanks Phil! I found stackoverflow.com/questions/40441625/… and tried my first attempt again, rewriting it slightly: ``` 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(); }); }); ``` However, this removes the entire data inside chats instead of the single node. :/ Commented Oct 19, 2020 at 0:33

3 Answers 3

6

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".

Sign up to request clarification or add additional context in comments.

2 Comments

Awesome, thank you! You're right, I didn't realize the -M was a part of the string. Do you know if there's an easy way to retrieve the key (e.g. -MJy8cxO85ldEnDScsWZ) based on the value of the uid (e.g. 5ZuZvUyByDcbteclgpM0t08beVn1)?
Sure, you should learn how to perform a filter query as described in the documentation. firebase.google.com/docs/database/web/…
5

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 !

Comments

0

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.');
      }
    });

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.