Firebase orderByChild 查询不返回有序结果

Firebase orderByChild query not returning ordered results

我正尝试根据 documentation example 使用 Firebase orderByChild() 函数,但查询未返回过滤或排序。

这是示例数据结构:

"notifications": { 
  "001": { 
    "member_id":      "abc123",
    "created_at":     1424357680681,
    "new":            true,
    "first_name":     "Jon",
    "last_name":      "Snow",
    "message":        "likes your photo"
  },
  "002": { 
    "member_id":      "abc456",
    "created_at":     1424357680681,
    "new":            true,
    "first_name":     "Clark",
    "last_name":      "Kent",
    "message":        "likes your comment"
  }
}

当用户登录时,我想查询通知哈希,只查询 member_id 与当前用户 ID 匹配的通知。

我已经尝试了带有和不带有“child_added”的两个版本。

选项A:

  ref.orderByChild("member_id").equalTo(memberId);

选项 B:

  ref.orderByChild("member_id").equalTo(memberId)
    .on("child_added", function(data) { 
       console.log("new child id = " + data.key());
    });

当我查询通知哈希时,查询 returns 所有通知的数组。它们既不限于当前用户的member_id,也不按member_id排序。 (我可以完全删除 member_id 键,通知仍然会返回)。

我总是可以通过 member_id 应用程序内过滤返回的数组,但我真的很想根据文档进行查询。

感谢任何帮助!

您的 memberId 变量很可能是一个数字,而您将相应的值存储为字符串。

如果您将数字存储为字符串,此查询将不会给出任何结果:

ref.orderByChild("member_id").equalTo(456)

但是这个会:

ref.orderByChild("member_id").equalTo('456')

代码片段中最简单的修复方法是将 memberId 强制转换为如下字符串:

ref.orderByChild("member_id").equalTo(''+memberId)

查看此 fiddle 工作示例:http://jsfiddle.net/695rf0vy/

我找到问题了! 我的印象是您可以在适当的位置添加查询修饰符。

我在做:

  ref.orderByChild("member_id").equalTo(memberId);
  var sync = $firebase(ref); 

实际上应该是:

  var sync = $firebase(ref.orderByChild("member_id").equalTo(memberId));