使用子参考值将数据推送到 Firebase
Posted
技术标签:
【中文标题】使用子参考值将数据推送到 Firebase【英文标题】:push data to firebase using child reference values 【发布时间】:2019-01-27 14:49:45 【问题描述】:我想使用 nodejs 将数据推送到 firebase。 我有一个包含 MACID 值的字符串,我想检索 MACID=macid 的键(存储在 firebase 中)。和模型(存储在 firebase 中)。
据此,我想推送类似'的数据 真实数据= 温度:“萨萨德”, 湿度:“123dsad4”, 时间戳:“dfssdsdf”,
firebase 就像
如图所示,每个用户都有许多设备。我想在 macid=MACID 的地方推送数据。我只有 MACID 可以比较。
如何将数据推送到 macid=MACID 的 firebase 并将其存储,如图所示。
提前致谢。
【问题讨论】:
【参考方案1】:如果您知道 UID,则可以查询该用户的设备以查找与 MACID 匹配的设备。
firebase.database().ref("users").child(uid).orderByChild("macid").equalTo(macId)
如果您不知道用户的 UID,则无法使用您当前的数据结构进行查询。您将需要添加一个将 MACID 映射到 UID 的附加列表,例如
"macids":
"dasdad": "h1Eg5...."
"dasasd": "h1Eg5...."
另见:
Firebase Query Double Nested Firebase query if child of child contains a value【讨论】:
在将 macid 映射到 uid 后,我如何将数据推送为引用那些 macid 和 uid。【参考方案2】:如果我对您的理解正确,您希望通过查询嵌套两层的字段(即在用户对象内,然后在设备对象内)来查找“用户”ID(***)。
这对于当前格式的数据库是不可能的 - 请参阅此问题: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 )
在这种情况下,您实际上并没有将“用户”节点用于任何事情 - 但我想您需要它来做某事。
最重要的是考虑如何您将实际读取您的数据,然后确定您的数据库应该如何构建。例如,如果您永远不会按用户获取设备列表,则无需将设备引用添加到用户节点。
【讨论】:
以上是关于使用子参考值将数据推送到 Firebase的主要内容,如果未能解决你的问题,请参考以下文章
如何将 git 子模块推送到 AWS Elastic Beanstalk?