查询firebase中的嵌套数据

时间:2014-11-13 13:40:21

标签: firebase

现在新的查询功能已经出来了,我将问这个问题。它类似于其他答案基于旧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”的帐户,我真的必须做两件事之一:

  1. 为帐户集合执行.on,然后过滤结果 我。
  2. 创建一个包含如下记录的参考表,然后在参考表上查询以获取帐户表的链接。
  3. [ { "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更深入地查询嵌套信息?

1 个答案:

答案 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

此索引假定每个电子邮件地址最多映射一个帐户。如果这不适合您的用例,您需要相应地修改数据结构。