首页 > 解决方案 > 如何仅返回深度嵌套属性为 False 的 Firebase 对象

问题描述

如果我有以下 Firebase 结构:

root:
    id1:
        subId1:
           prop: False
        subId2:
           prop: True
    id2:
        subId1:

    id3:
        subId1:
           prop: False
        subId2:
           prop: False

我将如何返回root,具有完整的树结构,但仅包含 prop 所在的最里面的子记录False

所以我希望上面的查询返回:

root:
    id1:
        subId1:
           prop: False

只有rootandprop是已知属性,iDandsubId字段是动态生成的。

我添加了一个索引,prop但是我正在使用的查询(python)没有结果:

db.reference('/root').order_by_child("prop").equal_to(False).get()

标签: pythonfirebase-realtime-database

解决方案


Firebase 从您附加侦听器的位置返回完整节点。您可以使用查询返回这些节点的子集,但该位置的每个子节点将始终完整返回。

如果您发现自己想要返回部分节点,请考虑更改您的数据模型以允许您想要的查询。因此,在您的情况下,您可以创建一个平面列表,如果子节点:

newRoot:
    id1_subId1:
       prop: False
    id1_subId2:
       prop: True
    id3_subId1:
       prop: False
    id3_subId2:
       prop: False

现在您可以轻松查询新的根节点并仅获取带有prop: False. 在使用 NoSQL 数据库时,修改数据模型以允许像这样的其他用例是很常见的。要了解更多信息,我强烈建议您阅读NoSQL 数据建模并观看Firebase for SQL 开发人员

我还建议查看我对这些相关问题的回答:


推荐阅读