我想知道,有没有办法更新键值?
让我们使用以下数据:
我的资料
我正在使用set()写入数据。现在,我希望用户对其进行编辑bookTitle,并且需要在两个地方都进行更改。我尝试使用update(),但似乎无法正常工作。我只能在bookTitle中编辑bookInfoNOT books。
移动不是一种选择,因为它会删除bookData。我也尝试使用push()进行编写,但是之后,由于我没有 pushID ,因此无法正确搜索(我需要搜索,因为用户不能拥有两本同名的书)
那么,有没有办法更新键值?还是有更好的方法呢?我接受建议。谢谢!
更新:这是我目前用来更新内部书名的内容bookInfo
var bookName = document.getElementById('bookName').value; firebase.database().ref('books/' + bookName + '/bookInfo').update({ bookTitle : bookName });
我想我明白了您要做什么。Firebase没有通过更新“重新命名”路径的一部分的概念。相反,您将必须完全 删除现有节点并重新创建它。您可以这样做:
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); });
这将从中删除信息,books/oldTitle并在中添加新标题books/newTitle。
警告:这取决于读取数据,然后执行第二次异步更新。如果您可能有多个用户同时操作同一数据,则可能会导致问题。您可以使用事务来自动执行此操作,但是如果它/books是具有许多节点的顶级资源,则可能会导致性能问题。
如果一个人可能一次编辑数据,则上述解决方案很好。如果不是,您可能要考虑使用非用户控制的标识符,例如推送ID。