【问题标题】:Downloading data from Firebase WHERE name = "someString"从 Firebase 下载数据 WHERE name = "someString"
【发布时间】:2017-08-14 18:30:36
【问题描述】:

我是 Firebase 的新手,正在尝试查询 Firebase 数据库。

我有一个看起来像这样的 firebase 树:

"mainData": 
   "users":
      "user1ID" :
         "name" : "John Mccgee"
         "age" : 54
         "hobbies" : 
            1 : "Playing Piano"
            2 : "Programming"
            3 : "Going to parties"
            4 : "Hiking"

       "user2ID" :
         "name" : "Jack Jones"
         "age" : 22
         "hobbies" : 
            1 : "Playing Soccer"
            2 : "Programming"
            3 : "Telling Jokes"

       "user3ID" :
          ...

我想在我的数据库中搜索"name",例如,以“Jac”开头,然后下载它仅限"hobbies"...我知道我可以按名称搜索,但是当我这样做时,Firebase 会下载 "user2ID" 下的所有子项。

那么,当其他孩子搜索时,是否可以只下载"hobbies" 下的孩子? ("name")

当然感谢您的阅读和回答。我希望这个问题足够清楚(:

【问题讨论】:

    标签: firebase firebase-realtime-database


    【解决方案1】:

    适用于 iOS 的 Firebase 客户端始终直接在您执行查询(或附加侦听器)的级别下下载整个节点。这是有经验的 Firebaser(和文档)建议不要在树中混合实体类型的众多原因之一。

    在您当前的模型中,如果不阅读所有用户的爱好,就无法读取或查询用户名。为防止这种情况,请将爱好与其他用户数据分开:

    "users":
      "user1ID" :
         "name" : "John Mccgee"
         "age" : 54
    
       "user2ID" :
         "name" : "Jack Jones"
         "age" : 22
    
       "user3ID" :
          ...
    
    "hobbies":
      "user1ID" :
            1 : "Playing Piano"
            2 : "Programming"
            3 : "Going to parties"
            4 : "Hiking"
    
       "user2ID" :
            1 : "Playing Soccer"
            2 : "Programming"
            3 : "Telling Jokes"
    
       "user3ID" :
          ...
    

    您仍然需要对数据库执行读取操作:

    1. 根据用户名查找用户的 UID
    2. 根据用户的 UID 查找用户的爱好

    【讨论】:

    • 但是这两个读取操作仍然会过于独立地调用数据库。难道没有办法只打一个电话并获得所需的结果吗?请赐教。
    • 您当前的数据模型允许您这样做。但它检索到的数据比您想要的多,并且违背了 Firebase 文档和专家的建议。
    猜你喜欢
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    相关资源
    最近更新 更多