Как использовать запрос Firebase для большой базы данных? - PullRequest
0 голосов
/ 06 октября 2019

У меня есть родительский узел в firebase, под которым находится более 2000 дочерних узлов. Теперь я хочу отфильтровать данные из этих дочерних узлов на основе даты и значения дочерних объектов.

- структура данных Firebase

https://cdn.discordapp.com/attachments/391824274576506892/630383990372565002/unknown.png

https://cdn.discordapp.com/attachments/391824274576506892/630384128365428766/unknown.png

Облачная функция отправляет данные в базу данных при публикации mqtt с устройства IoT. теперь всякий раз, когда я получаю публикацию mqtt, в firebase создается дочерний узел с датой и временем, и одно из значений (хорошее, плохое, среднее) меняется на единицу или ноль, и вызывается обратный вызов из firebase, и выполняется следующий код.

    setHourlyFeedbacks() {
    var that = this;
    var hourlyFeedbacks = { 2: 0, 4: 0, 6: 0, 8: 0, 10: 0, 12: 0, 14: 0, 
    16: 0, 18: 0, 20: 0, 22: 0, 24: 0 }
    var today = new Date().toString().slice(0, 15);
    var orgId = this.props.orgId;
    var device = this.props.title;
    var tf;

 db.ref("new_data").child(this.props.orgId).child(this.props.title).on("value", function (snap) {
        snap.forEach(node => {
            var date = node.key;
            date1 = date.slice(0, 15);
            console.log(node.key)
            if (date1 === today) {
                hour = parseInt(date.slice(16, 18));
                if (hour % 2 !== 0) {
                    if (hourlyFeedbacks[hour + 1] == null || 0) {
                        hourlyFeedbacks[hour + 1] = node.val().bad
                    }
                    else {
                        hourlyFeedbacks[hour + 1] += node.val().bad
                    }
                }
                else {
                    if (hourlyFeedbacks[hour] == null || 0) {
                        hourlyFeedbacks[hour] = node.val().bad
                    }
                    else {
                        hourlyFeedbacks[hour] += node.val().bad
                    }
                }
            }
        });

        detailsRef = db.ref("dailyStats/" + orgId + "/" + device + "/" + today);
        detailsRef.on("value", (snap2) => {
            console.log(snap2.val().footfall);
            tf = snap2.val().footfall;
        })

        that.setState({ hourlyFeeds: hourlyFeedbacks,totalFeed:tf });
    });
}


componentDidMount() {
    this.setHourlyFeedbacks();
}

Изображение, помеченное частью 1, - это то, как компонент выглядит при первом отображении без обратного вызова Firebase, и отображаемое значение является правильным. Однако, когда обратный вызов firebase получен, часть, обозначенная 2, показывает визуализированный компонент со значением 21, где ожидаемое значение было равно 11, а затем при следующем обратном вызове ожидаемое значение равно 13, и отображаемое значение равно 33, как показано, часть помечена3 на изображении ниже.

https://cdn.discordapp.com/attachments/391824274576506892/630436091782103071/IMG_20191006_213736.jpg

- скриншот приложения

Возможно, это просто глупая ошибка, которую я совершил, но я не могу понять: - (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...