繁体   English   中英

为什么 update() 会完全覆盖我在 Firebase 中的数据? 设置()与更新()

[英]Why does update() completely overwrites my data in Firebase? set() vs. update()

我已经浏览了 Firebase 文档,另外我在 stackoverflow 上找到了一些关于 Firebase 中的 set() 与 update() 的主题:例如这里

很清楚他们两个有什么区别。

在下面的代码中,为什么 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() 的行为?

前 后

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

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

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

以下对我有用:

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

显然,如果我像下面这样使用它,它就不起作用(它会覆盖:

            var newChild = {};
            newChild["ChildName/" + "2ndLevelChild"] = {
              [KeyVariable]: valueVariable
            };

           admin.database().ref(SITE).update(newChild);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM