Firebase RTDB如何读取通配符节点?新手求助
Firebase实时数据库读取通配符节点教程
先明确你的RTDB结构示例
你的数据库应该是类似这样的层级(那些带横杠的就是你说的「通配符节点」,是Firebase自动生成的唯一ID):
Sensor MQ7 -NHi7dBPMlVi6hXrnI03 MQ7: "25.6" timestamp: "2024-05-20 09:30" -NHi8xZkFd2WpQeRtY45 MQ7: "26.1" timestamp: "2024-05-20 09:35" -NHi9aBcDeFgHiJkLmNo MQ7: "24.8" timestamp: "2024-05-20 09:40"
修改代码读取所有通配符节点
你原来的代码指定了具体的节点ID,现在要去掉这个固定ID,直接读取父节点下的所有子节点,然后遍历输出:
// 直接引用父节点"Sensor MQ7",不用指定具体的子节点ID const rtdbReference = admin.database().ref("Sensor MQ7"); // 获取父节点下的所有数据快照 const snap = await rtdbReference.get(); // 准备一个变量存放所有节点内容 let allSensorData = ""; // 遍历每个通配符节点(就是那些带横杠的ID节点) snap.forEach(childSnap => { // childSnap.key 是当前节点的ID,比如 "-NHi7dBPMlVi6hXrnI03" const nodeId = childSnap.key; // childSnap.val() 获取当前节点下的所有数据,包括MQ7字段 const nodeData = childSnap.val(); const mq7Value = nodeData.MQ7; const timestamp = nodeData.timestamp; // 如果没有这个字段可以直接删掉 // 把内容拼接到allSensorData里,格式可按需调整 allSensorData += `节点ID: ${nodeId}\nMQ7数值: ${mq7Value}\n时间: ${timestamp}\n\n`; }); // 返回所有内容到响应里 return res.status(200).send({ method: "sendMessage", chat_id, text: `${first_name}\n${receivedMessage}\n\n所有传感器数据:\n${allSensorData}` });
关键知识点解释
- 不用指定具体的子节点ID,直接引用父节点
"Sensor MQ7",就能获取它下面所有子节点的完整快照。 snap.forEach()是Firebase快照的遍历方法,会逐个处理每个通配符节点。childSnap.key可以拿到每个节点的唯一ID,childSnap.val()拿到节点内的所有数据,你可以按需提取需要的字段(比如仅保留MQ7数值)。
内容的提问来源于stack exchange,提问作者Ilyas Nawawie
相关产品推荐
相关产品推荐

