2015-03-31 92 views
5

將關於某人的帖子添加到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表單中獲取。

我該怎麼做?

回答

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

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