Firebase 更新或设置

Firebase update or set

在将一个人的 post 添加到 Firebase 数据库后,我想将对新 post 的引用添加到该人。但是,此人可能已经存在,也可能不存在。

我有:

var ref = new Firebase("https://mydatabase.firebaseio.com/");
var _person = document.getElementById("Person").value;
var _remark = document.getElementById("Remark").value;

var postsRef = ref.child("remarks");
var newPostRef = postsRef.push({
    person: _person,
    remark: _remark
});

var postID = newPostRef.key();

var personRef = ref.child("person");
personRef.update({
    _person: postID
});

然而,这会在子 person 中创建一个名为 _person 的节点,而不是 _person 变量的值。使用 set() 会覆盖现有的人。

示例: 首先创建一个节点 remarks/-JlkbxAKpQs50W7r84gf,子节点 person/123456

之后,我想创建一个节点 person/123456(仅当它尚不存在时),然后向其添加一个子节点 remark/-JlkbxAKpQs50W7r84gf。 post-id 是自动生成的 (Firebase),但此人的 ID 是从 html 表单中获取的。

我该怎么做?

根据您的数据结构,在您 update 之前,您可能可以获得对您想要的 person 的引用。

因此,如果您的数据如下所示:

{
    "remarks" : {
                   ...
                },

    "person" : {
                 "123456" : {
                                "name" : "foo",
                                ...
                                "blah" : "bar"
                            },
                 ...
               }
}

document.getElementById("Person").value给你123456,你可以得到这样的参考:

var personRef = ref.child("person").child(_person);

然后你想看看它是否存在,如果存在,更新它:

personRef.once('value', function(snapshot) {

    if( snapshot.val() === null ) {
        /* does not exist */
    } else {
        snapshot.ref.update({"postID": postID});
    }

});