如何在Firebase中读取嵌套节点?

时间:2018-01-20 13:22:27

标签: java android firebase firebase-realtime-database

如何直接阅读Firebase子节点?

我有像Users/userId/deviceId这样的节点,我希望在注册时直接读取deviceId。我没有userId访问deviceId

注意:

我不想迭代整个用户节点,因为我知道我可以这样做:

for (DataSnapshot dataSnapshot1:dataSnapshot.getChildren())
{
    User user = dataSnapshot1.getValue(User.class);
    if (user.getDeviceId().equals(android_id))
    {
        //alert user
    }
}

但我希望像users/userId/deviceId一样在单行中实现 如果你有更好的方法,可以分享。

2 个答案:

答案 0 :(得分:0)

您不能在一行代码中执行此操作。迭代的方式是从数据库获取数据的正确方法。对于Firebase,在getChildren()对象上使用DataSnapshot是一种常见做法。

答案 1 :(得分:0)

如果您只有Users/userId/deviceId,那么如果您知道deviceId,那么您只有足够的数据可以查找userId

如果 想要在不知道userId的情况下查找设备,则必须向数据库添加更多信息。例如。 Devices/deviceId/...。使用此附加数据结构,如果您只知道deviceId,则可以查找存储的数据。

这种类型的数据复制在NoSQL数据库中非常非常常见:您为应用程序的用例建模数据。当您添加更多用例时,通常最终会向数据库添加更多数据。这也称为非正规化或扇形展开。

Firebase documentation has a page on this type of data structuring,但我还建议您阅读NoSQL data modeling并观看Firebase for SQL developers