为什么 update() 在 Firebase 中完全覆盖我的数据?set() vs. update()
为什么 update() 在 Firebase 中完全覆盖我的数据?set() vs. update()
我已经阅读了Firebase文档,并在stackoverflow上找到了一些关于Firebase中set()和update()的主题,例如这里。\n很清楚它们之间的区别。\n在下面的代码中,为什么update()会覆盖我的现有数据?\n
function saveChanges(event) { event.preventDefault(); let modifiedTitle = document.getElementById('blog-title').value; let modifiedContent = document.getElementById('blog-content').value; let modifiedId = document.getElementById('blog-id-storage').innerHTML; let postData = title: modifiedTitle, content: modifiedContent }; let updates = {}; updates[modifiedId] = postData; firebase.database().ref().child('posts/').update(updates); }
\n我最初有一个标题、内容、发布日期和ID,当我更新它时,标题和内容会被更新,而发布日期和ID会被删除。为什么?这应该是set()的行为吗?\n\n
Firebase的update()方法会完全覆盖指定位置的数据,这是因为update()方法只查看调用它的位置的直接子节点,而不会考虑该位置下的其他子节点。因此,每次调用update()方法时,都会完全替换postId-1的所有数据。
如果你只想更新postId-1的子节点数据,可以将该位置作为调用update()方法的基础位置,如下所示:
firebase.database().ref().child('posts').child(modifiedId) .update(postDate)
这样做可以确保只更新指定位置的子节点数据,而不会影响其他子节点的数据。
如果你想了解更多关于update()方法的详细信息,可以参考Firebase的官方文档:[firebase.google.com/docs/database/admin/save-data#section-update](https://firebase.google.com/docs/database/admin/save-data#section-update)