2015-03-31 20 views
5

Sau khi thêm bài đăng về một người vào cơ sở dữ liệu Firebase, tôi muốn thêm tham chiếu vào bài đăng mới cho người đó. Tuy nhiên, người đó có thể hoặc có thể chưa tồn tại.Cập nhật Firebase hoặc đặt

tôi có:

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

Tuy nhiên đó tạo ra một nút gọi là _person ở người trẻ thay vì giá trị của biến _person. Sử dụng set() sẽ ghi đè lên một người hiện có.

Ví dụ: Lần đầu tiên một nút mạc/-JlkbxAKpQs50W7r84gf được tạo ra với người nút con/123456

Sau đó tôi muốn tạo một người node/123456 (chỉ nếu nó không tồn tại) và hơn thêm một nút con nhận xét/-JlkbxAKpQs50W7r84gf với nó. Id bài đăng được tạo tự động (Firebase) nhưng id của người đó sẽ được lấy từ biểu mẫu html.

Tôi làm như thế nào?

Trả lời

9

Tùy thuộc vào cách dữ liệu của bạn được cấu trúc, trước khi bạn update, bạn có thể tham khảo person mà bạn muốn.

Vì vậy, nếu dữ liệu của bạn trông giống như sau:

{ 
    "remarks" : { 
        ... 
       }, 

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

document.getElementById("Person").value mang đến cho bạn 123456, bạn có thể nhận được các tài liệu tham khảo như:

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

Sau đó, bạn muốn để xem nếu nó tồn tại, và nếu có, hãy cập nhật:

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

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

}); 
+0

Trong ví dụ trên, tôi tin 'ref' là một operty, không phải là một phương thức. Nói cách khác, nó phải là 'snapshot.ref' không phải' snapshot.ref() '. Tôi không chắc liệu điều này có thay đổi trong các phiên bản Firebase mới hơn hay không, nhưng gần đây tôi đã gặp sự cố này. – Andi

+0

snapshot.ref() không hoạt động và gọi snaphot.ref trên tham chiếu gốc sẽ trả về giá trị rỗng – Nandhu

Các vấn đề liên quan