Firebase orderByChild查询不返回有序结果

时间:2015-03-22 19:43:22

标签: firebase

我尝试按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());
    });

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

我总是可以通过member_id in-app过滤返回的数组,但我真的希望根据文档使查询正常工作。

感谢任何帮助!

2 个答案:

答案 0 :(得分:4)

我发现了问题! 我的印象是你可以添加查询修饰符。

我在做:

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

实际应该是:

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

答案 1 :(得分:2)

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

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

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

但是这个会:

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

您的代码片段中最简单的修复是将memberId强制转换为这样的字符串:

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

查看这个工作样本的小提琴:http://jsfiddle.net/695rf0vy/