2015-03-31 3 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. Почтовый идентификатор генерируется автоматически (Firebase), но идентификатор человека должен быть взят из 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

+0

snapshot.ref() не работает, а вызов snaphot.ref в корневой ссылке возвращает null – Nandhu

Смежные вопросы