我想使用nodejs将数据推送到Firebase。 我有一个包含MACID值的字符串,我想检索MACID = macid(存储在firebase中)的密钥。和模型(存储在firebase中)。
据此,我想像这样推送数据 realdata = { 温度:“ sasad”, 湿度:“ 123dsad4”, 时间戳:“ dfssdsdf”, }
firebase就像
如图所示,每个用户都有许多设备。我想在macid = MACID处推送数据。我只有要比较的MACID。
如何将数据推送到其中macid = MACID的Firebase,它将如图片所示存储。
谢谢。
答案 0 :(得分:2)
如果知道UID,则可以向该用户的设备查询与MACID匹配的设备。
firebase.database().ref("users").child(uid).orderByChild("macid").equalTo(macId)
如果您不知道用户的UID,则无法使用当前数据结构进行查询。您将需要添加将MACID映射到UID的其他列表,例如
"macids": {
"dasdad": "h1Eg5...."
"dasasd": "h1Eg5...."
}
另请参阅:
答案 1 :(得分:2)
如果我对您的理解正确,那么您正在通过查询嵌套两个深度的字段(即在用户对象内,然后在设备对象内)来查找“用户” ID(顶级)。 / p>
对于当前格式的数据库,这是不可能的-请参见以下问题:Deep path query using wildcard as a path(在您的实例中,“通配符”将是设备ID)。
我建议您构建数据库,以便获得设备和用户的列表。例如:
users:
-userId:
-devices:
-device ID:true,
-device ID:true,
-device ID:true
etc....
devices:
-deviceID:
-users:
-user ID:true,
-user ID:true,
-user ID:true
-MACID: _____,
-realData: _____,
-etc...
*我不确定是否最好使用[user ID]:[true]或[randomPushedId]:[user ID]-但两者的效果相同。也许有人可以添加到此。
然后可以通过MACID查询“设备”节点。像这样:
yourDatabaseRef.child("devices").orderByChild("MACID").equalTo([YOURMACIDHERE])
.once('value', (response) => { // GET KEY, THEN MAKE THE UPDATE })
在这种情况下,您实际上并没有使用“用户”节点做任何事情-但我想您需要它来做一些事情。
最重要的是考虑如何,您将实际读取数据,然后确定应该如何构造数据库。例如,如果您永远不会按用户获取设备列表,则无需将设备引用添加到用户节点。