为什么update()完全覆盖Firebase中的数据? set()与update()

时间:2018-11-24 13:04:43

标签: javascript firebase firebase-realtime-database

我已经阅读了Firebase文档,此外,我还发现了一些有关Firebase中set()与update()的stackoverflow主题:例如here

很明显,两者之间有什么区别。

  

在以下代码中,为什么update()会覆盖我现有的数据?

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);
}

我最初有一个标题,内容,datePosted和Id,当我更新它时,标题和内容被更新,dataPosted和Id被删除。为什么?虽然这应该是set()的行为?

before after

1 个答案:

答案 0 :(得分:4)

update()的工作方式是仅查看调用update的位置的直接子级。该位置下方的所有内容都会被替换。因此,您要做的就是每次都替换整个postId-1。

如果您只想更新postId-1的子代,则将其称为调用update()的基本位置:

firebase.database().ref().child('posts').child(modifiedId)
    .update(postDate)