我尝试按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过滤返回的数组,但我真的希望根据文档使查询正常工作。
感谢任何帮助!
答案 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/