Firebase admin java SDK - выборка данных изменений вместо всех данных в тот момент, когда происходит событие - PullRequest
0 голосов
/ 04 октября 2018

Я использую ниже Firebase-Admin версии 6.5.0

Моя структура БД выглядит следующим образом

-DB  
  -chat  
     -branches  
      - 1  
      - 2  
        - users  
        - message
         -1  
          - content : "hi",  
          - messageType : "text"  
         -2
          - content : "hello",
          - messageType : "text"
      - 3

В структуре выше я слушаю ребенка на уровне ветвей, как показано ниже

ref.child("chat").child("branches").addValueEventListener()

Всякий раз, когда добавляется какое-то новое сообщение, я получаю все данные ниже ветвей, а не только измененную ветку.т.е. я получаю 1,2,3 данных всех ветвей в вышеупомянутой структуре данных.

Есть ли способ получить только измененные дочерние данные?

.ie chat - branch - 2 - message -содержимое (если содержимое изменяется).


редактирование в соответствии с ответом ниже

Если я слушаю изменения, сделанные в сообщении 2, с использованием ref.child ("chat").child ("ветки"). addChildEventListener (new ChildEventListener ())

для дочерних веток - только 2, но дочерних - все сообщения.Как получить только измененные дочерние данные сообщения.

Я пытаюсь сделать запрос вот так chat.branches. $ Branchid.message. $ Messageid

Ответы [ 2 ]

0 голосов
/ 04 октября 2018
 ref.on("child_changed", function(snapshot) {
  var changedPost = snapshot.val();
  console.log("The updated post title is " + changedPost.title);
});

Для получения дополнительной информации вы можете нажать Здесь

0 голосов
/ 04 октября 2018

A ValueEventListener всегда получает снимок всего местоположения, к которому вы его прикрепили.

Если вы хотите получить снимок определенного дочернего элемента, вам следует использовать ChildEventListener.

ref.child("chat").child("branches").addChildEventListener(new ChildEventListener() {
  public void onChildAdded(DataSnapshot snapshot, String previousChildKey) {
    System.out.println(snapshot.getKey()+" was added after "+previousChildKey);
  }
  public void onChildChanged(DataSnapshot snapshot) {
    System.out.println(snapshot.getKey()+" was changed");
  }
  ...

Когда вы впервые присоединяете этот слушатель, метод onChildAdded будет вызываться для каждой ветви.После этого, если вы внесете изменение в одну ветку, метод onChildChanged будет вызван только для этой ветви.

...