使用子参考值将数据推送到Firebase

时间:2018-08-21 12:04:41

标签: node.js firebase firebase-realtime-database

我想使用nodejs将数据推送到Firebase。 我有一个包含MACID值的字符串,我想检索MACID = macid(存储在firebase中)的密钥。和模型(存储在firebase中)。

据此,我想像这样推送数据         realdata = {               温度:“ sasad”,               湿度:“ 123dsad4”,               时间戳:“ dfssdsdf”,                  }

firebase就像

enter image description here

如图所示,每个用户都有许多设备。我想在macid = MACID处推送数据。我只有要比较的MACID。

如何将数据推送到其中macid = MACID的Firebase,它将如图片所示存储。

谢谢。

2 个答案:

答案 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 })

在这种情况下,您实际上并没有使用“用户”节点做任何事情-但我想您需要它来做一些事情。

最重要的是考虑如何,您将实际读取数据,然后确定应该如何构造数据库。例如,如果您永远不会按用户获取设备列表,则无需将设备引用添加到用户节点。