现在新的查询功能已经出来了,我将问这个问题。它类似于其他答案基于旧API的问题。
示例数据:
{
"accounts" : {
"simplelogin:001" : {
"email" : "test1@test.com",
"mobile" : "+15555551001",
... many more fields
},
"simplelogin:002" : {
"email" : "test2@test.com",
"mobile" : "+15555551001",
... many more fields
},
"simplelogin:003" : {
"email" : "test3@test.com",
"mobile" : "+15555551003",
... many more fields
}
}
我希望新的查询功能允许查询嵌套数据。但是,根据我的看法,为了找到电子邮件地址为“test2@test.com”的帐户,我真的必须做两件事之一:
.on
,然后过滤结果
我。
[
{
"account": "simplelogin:001",
"email": "test1@test.com",
"mobile": "+15555551001"
},
{
"account": "simplelogin:002",
"email": "test2@test.com",
"mobile": "+15555551001"
},
{
"account": "simplelogin:003",
"email": "test3@test.com",
"mobile": "+15555551003"
}
]
这些真的是我唯一的选择吗?是否无法使用新的查询API更深入地查询嵌套信息?
答案 0 :(得分:3)
如果您的问题是"如何根据其电子邮件获取帐户?",则:
var ref = new Firebase("https://your.firebaseio.com/accounts");
ref.orderByChild('email').equalTo('test2@test.com').on('value', function(snapshot) {
console.log(snapshot.val());
});
请参阅此jsbin了解工作示例:http://jsbin.com/yikecu/1/edit?js,console
事实证明,OP有一个嵌套的每个帐户的电子邮件地址集合,并希望根据一个电子邮件地址的存在来选择项目。
var data = {
"accounts" : {
"simplelogin:001" : {
"emails" : ["test1@test.com", 'test1@bla.com'],
"mobile" : "+15555551001"
},
"simplelogin:002" : {
"emails" : ["test2@test.com", 'test2@bla.com'],
"mobile" : "+15555551001"
},
"simplelogin:003" : {
"emails" : ["test3@test.com", 'test3@bla.com'],
"mobile" : "+15555551003"
}
}
};
我确实不认为"包含"查询目前是可能的。因此,自己创建索引是最好的方法。我会保持该指数非常简单:
email_to_uid:
test1@test.com: simplelogin:0001
test1@bla.com: simplelogin:0001
test2@test.com: simplelogin:0002
test3@bla.com: simplelogin:0002
test3@test.com: simplelogin:0003
test3@bla.com: simplelogin:0003
此索引假定每个电子邮件地址最多映射一个帐户。如果这不适合您的用例,您需要相应地修改数据结构。