【问题标题】:Firebase orderByChild() with nested keys带有嵌套键的 Firebase orderByChild()
【发布时间】:2015-10-29 02:47:40
【问题描述】:

当子属性有名称时,Firebase orderByChild() 效果很好,因此对于这样的数据:

groups
    <groupID>
        groupStatus: "Active"

这样很容易获得处于“活动”状态的组的组ID:

var ref = "http://myFirebase.firebaseio.com/groups";
ref.orderByChild("groupStatus").equalTo("Active").on("child_added", function(snapshot) {
    console.log(snapshot.key());
});

但我有以下形式的组和这些组的成员的 firebase 数据:

groups
    group123
        member404: true
        member503: true
        ...
    group124
        member503: true
        member221: true
        ...

我需要生成所有成员 ID 的列表,这些成员 ID 是特定成员的“朋友”,定义为至少与他们共同位于一个组中。对于成员 503,您会认为这将是一个 orderByChild() 机会。但是由于 memberID 是嵌套在组下的键,所以语法是什么?

类似:

ref.orderByChild(???).equalTo("member503")

当然,我可以在本地将所有组的所有成员放入一个数组中,但肯定有办法让 firebase 为我做这件事吗?

【问题讨论】:

    标签: firebase


    【解决方案1】:

    您在这里混淆了子键和值。解决办法:

    ref.child('groups').orderByChild('member404').equalTo(true)
    

    【讨论】:

    • 是的,membersRef.orderByChild(uid).equalTo(true) 适用于查询,但现在我的问题是如何创建索引以使其执行。 Firebase 抱怨“考虑添加“.indexOn”:“41ab3832-6a90-4141-bdf5-92c5cac0f99c”,这是一个特定的成员 ID。显然,这是不切实际的。而且不可能在索引规范中使用 $location 变量。任何人都知道如何正确索引这个?
    • 是的。您可以通过创建自己的所谓反向索引 来做到这一点。在您的用户列表中,还要跟踪他们所属的组。这样,您可以直接查找“用户组”和“用户组”。在 NoSQL 世界中,直接查找总是胜过查询相同数据。在这里阅读:stackoverflow.com/questions/16638660/…
    猜你喜欢
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 2017-08-22
    • 2020-12-26
    • 2017-05-28
    • 1970-01-01
    相关资源
    最近更新 更多