Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
50
rated 0 times [  52] [ 2]  / answers: 1 / hits: 30494  / 8 Years ago, tue, august 23, 2016, 12:00:00

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



Let´s use the following data:



my



I am using set() to write the data.
Now, I want the user to edit their bookTitle 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 bookTitle in bookInfo NOT on books.



Moving is not an option because it will erase the bookData.
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 bookInfo



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

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

More From » json

 Answers
25

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.


[#60942] Sunday, August 21, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
jaden

Total Points: 709
Total Questions: 91
Total Answers: 91

Location: Maldives
Member since Sat, Jan 29, 2022
2 Years ago
;