Firebase更新或设置

问题描述:

将关于某人的帖子添加到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()会覆盖现有的人。

例子: 的首次讲话/与子节点创建人一个-JlkbxAKpQs50W7r84gf节点/ 123456

之后,我想创建一个节点人/ 123456(仅当它不存在),比加一个子节点备注/ -JlkbxAKpQs50W7r84gf到它。后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}); 
    } 

}); 
+0

在你上面的例子中,我相信'ref'是一个pr操作,而不是一种方法。换句话说,它应该是'snapshot.ref'而不是'snapshot.ref()'。我不确定这是否在更新版本的Firebase中发生了变化,但最近我遇到了这个问题。 – Andi 2017-08-04 14:50:40

+0

snapshot.ref()不是函数,并且在根引用上调用snaphot.ref将返回null – Nandhu 2017-10-23 15:42:57