我在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
-应用程序的屏幕截图
可能只是我犯的一个愚蠢的错误,但我无法弄清楚:-(