Firebase更新或设置

时间:2015-03-31 16:46:03

标签: javascript firebase

将有关某人的帖子添加到Firebase数据库后,我想将该帖子的引用添加到此人。但是,该人可能已经存在,也可能不存在。

我有:

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变量的值。使用set()会覆盖现有的人。

实施例: 首先,使用子节点person / 123456创建节点备注/ -JlkbxAKpQs50W7r84gf

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

我该怎么做?

1 个答案:

答案 0 :(得分:9)

根据数据的结构方式,在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});
    }

});