Luis Rodriguez Luis Rodriguez - 7 months ago 169
Javascript Question

Is it possible to rename a key in the Firebase Realtime Database?

I was wondering, is there a way to update the key value?

Let´s use the following data:

my data

I am using set() to write the data.
Now, I want the user to edit their

and it needs to change on both places. I tried using update() but I can´t seem to make it work. I can only edit the
NOT on

Moving is not an option because it will erase the
I also tried writing using push() but then, I can´t search properly because I don´t have the pushID (I need the search because users can't have two books with the same name)

So, is there a way to update the key value?
or, is there a better approach to this? I accept suggestions. Thank you!

Update: This is what I´m currently using to update the book title inside

var bookName = document.getElementById('bookName').value;

firebase.database().ref('books/' + bookName + '/bookInfo').update({
bookTitle : bookName


I think I see what you're trying to do. Firebase doesn't have the concept of "renaming" a part of the path via update. Instead you will have to completely remove the existing node and recreate it. You can do that like so:

var booksRef = firebase.database().ref('books');
booksRef.child(oldTitle).once('value').then(function(snap) {
  var data = snap.val();
  data.bookInfo.bookTitle = newTitle;
  var update = {};
  update[oldTitle] = null;
  update[newTitle] = data;
  return booksRef.update(update);

This will remove the info from books/oldTitle and re-populate it with a new title in books/newTitle.

Caveat: This relies on reading the data and then performing a second async update. If you are likely to have multiple users operating on the same data at the same time this could cause issues. You could use a transaction to do this atomically but if /books is a top-level resource with many nodes that may cause performance problems.

If one person is likely to edit the data at a time, the above solution is fine. If not, you may want to consider using a non-user-controlled identifier such as a push id.