在firebase中查询嵌套数据

在firebase中查询嵌套数据,firebase,Firebase,现在新的查询功能已经推出,我要问这个问题。这与其他问题类似,这些问题的答案基于旧的API 示例数据: { “账户”:{ “simplelogin:001”:{ “电子邮件”:test1@test.com", “移动”:“+155551001”, …更多的领域 }, “simplelogin:002”:{ “电子邮件”:test2@test.com", “移动”:“+155551001”, …更多的领域 }, “simplelogin:003”:{ “电子邮件”:test3@test.com",

现在新的查询功能已经推出,我要问这个问题。这与其他问题类似,这些问题的答案基于旧的API

示例数据:


{
“账户”:{
“simplelogin:001”:{
“电子邮件”:test1@test.com",
“移动”:“+155551001”,
…更多的领域
},
“simplelogin:002”:{
“电子邮件”:test2@test.com",
“移动”:“+155551001”,
…更多的领域
},
“simplelogin:003”:{
“电子邮件”:test3@test.com",
“移动”:“+155551003”,
…更多的领域
}
}

我希望新的查询功能能够允许查询嵌套数据。但是,根据我所看到的,为了找到具有电子邮件地址的帐户”test2@test.com“,我真的必须做两件事中的一件:

  • 对accounts集合执行
    .on
    ,然后过滤结果 我自己
  • 创建一个包含如下记录的引用表,然后查询该引用表以获取到accounts表的链接
  • 
    [
    {
    “账户”:“simplelogin:001”,
    “电子邮件”:test1@test.com",
    “移动”:“+155551001”
    },
    {
    “账户”:“simplelogin:002”,
    “电子邮件”:test2@test.com",
    “移动”:“+155551001”
    },
    {
    “账户”:“simplelogin:003”,
    “电子邮件”:test3@test.com",
    “移动”:“+155551003”
    }
    ]
    

    这些真的是我唯一的选择吗?是否不可能使用新的查询API来查询更深入的嵌套信息?

    如果您的问题是“如何根据其电子邮件获取帐户?”,那么:

    有关工作示例,请参见此jsbin:

    更新 事实证明,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"
        }
      }
    };
    
    我确实不认为“contains”查询目前是可能的。因此,自己创建索引是最好的方法。我会让该索引非常简单:

    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
    

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

    您应该能够根据帐户的任何属性获取该帐户。您尝试了什么吗?请参阅下面Frank的答案。我提出了这个问题,但他的答案是spot-on.Alr是的,我觉得自己在这里像个傻瓜。我的样本有点太仓促了——答案很明显。每个帐户实际上都有一个“电子邮件”数组,里面有电子邮件。电话号码也是一样。不过,你回答了问题。很抱歉打扰你。感谢你的原始回复和跟进
    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