使用子参考值将数据推送到 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?

只有在满足条件的情况下,有没有办法将子文档推送到 mongodb 数组中?

Vuejs,我正在尝试将子对象推送到数组

将文档推送到猫鼬模型数组中的子文档中

如何将从父组件传递的道具推送到子组件中的数组?

通过 Autodesk Forge 将数据推送到云端