Обновления в реальном времени с Firestore после миграции из Realtimedatabase - PullRequest
0 голосов
/ 08 сентября 2018

В настоящее время я переносю свое приложение из Realtimedatabase в Firestore.Я застрял с проблемой, в которой мне нужны ваши предложения.

Приложение предназначено для системы мониторинга энергопотребления, где ежеминутные данные передаются с клиентского устройства.Это должно быть прочитано веб-приложением, которое находится в другом месте.Клиент находится на Python, а сервер является веб-приложением.

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

Energmeter1
    --->PowerData
       -->Auto-ID1
           -->Volt:315
           -->timeint: 365789    
       -->Auto-ID2
           -->Volt:318
           -->timeint: 365790

Теперь на приемном конце в веб-приложении у меня есть приложение для построения диаграмм, которое обновляетпо мере добавления каждой информации.

С Firebase Realtime это было очень легко и без проблем. Я использовал следующий код

var fb = firebase.database().ref(url);
fb.endAt().limitToLast(3).on('child_added', function(data)

всякий раз, когда была сделана новая запись, я использую ее для получения и отображения наПанель инструментов реального времени, но с Firestore кажется невозможным

feeder1
.orderBy("timeint") 
.onSnapshot(function(doc)

Вышеприведенная функция извлекает все записи в запросах, а не только ту, которая была недавно добавлена.

Мои вопросы,

  1. Правильный ли мой подход?
  2. Можем ли мы реализовать аналогичную функциональность с помощью Firestore или это невозможно вообще?

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать, я буду рад предоставить

Спасибо

1 Ответ

0 голосов
/ 08 сентября 2018

Снимок содержит все документы, соответствующие запросу. Но вы можете легко найти только новые дополнения, проверив свойство docChanges. Из документации Firestore о проверке изменений :

db.collection("cities").where("state", "==", "CA")
    .onSnapshot(function(snapshot) {
        snapshot.docChanges().forEach(function(change) {
            if (change.type === "added") {
                console.log("New city: ", change.doc.data());
            }
            if (change.type === "modified") {
                console.log("Modified city: ", change.doc.data());
            }
            if (change.type === "removed") {
                console.log("Removed city: ", change.doc.data());
            }
        });
    });

Итак, в вашем случае:

feeder1
  .orderBy("timeint") 
  .onSnapshot(function(snapshot) {
    snapshot.docChanges.forEach(function(change) {
      if (change.type === "added") {
        // Do whatever you'd do on on('child_added' on the Realtime Database
      }
    });
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...