为什么 update() 在 Firebase 中完全覆盖我的数据?set() vs. update()

3 浏览
0 Comments

为什么 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\"before\"\n\"after\"

0
0 Comments

当使用`update()`方法时,它会完全覆盖Firebase中的数据。这是因为`update()`方法是用提供的数据对象来替换现有的数据。相反,`set()`方法用提供的数据对象来更新现有的数据或创建新的数据。

解决方法是使用`set()`方法而不是`update()`方法来更新数据。以下是修改后的代码:

admin.database().ref(SITE).child("ChildName").child("2ndLevelChild")
    .set({[KeyVariable]: valueVariable});

这样,数据将被更新而不是完全替换。

0
0 Comments

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)

0