我想知道,有没有办法更新键值?
让我们使用以下数据:
我正在使用set()写入数据。现在,我希望用户对其进行编辑bookTitle
,并且需要在两个地方都进行更改。我尝试使用update(),但似乎无法正常工作。我只能在bookTitle
中编辑“bookInfo
不在” 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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句