如何在大型数据库上使用Firebase查询?

时间:2019-10-06 16:13:51

标签: javascript firebase react-native firebase-realtime-database

我在firebase上有一个父节点,在该节点下有超过2000个子节点。现在,我想根据子对象的日期和值从这些子节点中过滤掉数据。

-firebase数据结构

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

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

云功能会根据从IoT设备发布的mqtt将数据发送到Firebase。现在,每当我发布mqtt时,就会在firebase上创建具有日期和时间的子节点,并且值(好,坏,平均)之一更改为1或零,并且从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的渲染组件,其中,was的预期值为11,随后在下一次回调中,预期的值为13,显示的值为33,如图所示下图为3。

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

-应用程序的屏幕截图

可能只是我犯的一个愚蠢的错误,但我无法弄清楚:-(

0 个答案:

没有答案