菜鸟教程小白 发表于 2022-12-12 18:41:53

ios - 如何在一个查询中检索多个数据 Firebase


                                            <p><p>我是 firebase 和 nosql 的新手。我遵循了构建数据的指南,这就是我的数据的样子</p>

<pre><code>{&#34;Guardians&#34; : {
      &#34;jojo-pti-gros&#34; : {
          &#34;-KBT2ui6wlC6Fgk1c7Xa&#34; : {
            &#34;creationDate&#34; : &#34;2016-02-26 15:50:56&#34;,
            &#34;level&#34; : &#34;2&#34;,
            &#34;light&#34; : &#34;2&#34;,
            &#34;type&#34; : &#34;Titan&#34;
          }
      }
},
&#34;Players&#34; : {
      &#34;jojo-pti-gros&#34; : {
          &#34;console&#34; : &#34;PS4&#34;,
          &#34;creationDate&#34; : &#34;2016-02-26 15:50:39&#34;,
          &#34;currentGuardian&#34; : &#34;-KBT2ui6wlC6Fgk1c7Xa&#34;,
          &#34;email&#34; : &#34;[email protected]&#34;,
          &#34;gamertag&#34; : &#34;jojo-pti-gros&#34;,
          &#34;guardians&#34; : {
            &#34;-KBT2ui6wlC6Fgk1c7Xa&#34; : &#34;true&#34;
          }
      }
},
&#34;Teams&#34; : {
   &#34;-KBhfH9U3CxQPZiCs5ru&#34; : {
         &#34;activity&#34; : &#34;Raid - Normal - Crota&#39;s end&#34;,
         &#34;creationDate&#34; : &#34;2016-02-29 16:37:14&#34;,
         &#34;language&#34; : &#34;Any language&#34;,
         &#34;leader&#34; : &#34;jojo-pti-gros&#34;,
         &#34;maxPlayers&#34; : &#34;6&#34;,
         &#34;mic&#34; : &#34;true&#34;,
         &#34;minimumLight&#34; : &#34;55&#34;,
         &#34;players&#34; : {
             &#34;jojo-pti-gros&#34; : &#34;true&#34;
         },
         &#34;teamDescription&#34; : &#34;Chaud pour un raid&#34;
   }
}}
</code></pre>

<p>当我尝试检索一个团队时,我想要一个这样的 json。</p>

<pre><code>&#34;-KBhfH9U3CxQPZiCs5ru&#34; =   {
    activity = &#34;Raid - Normal - Crota&#39;s end&#34;,
    creationDate = &#34;2016-02-29 16:37:14&#34;,
    language = &#34;Any language&#34;,
    leader = &#34;jojo-pti-gros&#34;,
    maxPlayers = 6,
    mic = true,
    minimumLight = 55,
    players = {
      &#34;jojo-pti-gros&#34; = {
            &#34;creationDate&#34; = &#34;2016-02-26 15:50:56&#34;,
            &#34;level&#34; = &#34;2&#34;,
            &#34;light&#34; = &#34;2&#34;,
            &#34;type&#34; = &#34;Titan&#34;
      }
    },
    teamDescription = &#34;Chaud pour un raid&#34;
}
</code></pre>

<p>但是我有这个 json 代替</p>

<pre><code>&#34;-KBhfH9U3CxQPZiCs5ru&#34; =   {
    activity = &#34;Raid - Normal - Crota&#39;s end&#34;,
    creationDate = &#34;2016-02-29 16:37:14&#34;,
    language = &#34;Any language&#34;,
    leader = &#34;jojo-pti-gros&#34;,
    maxPlayers = 6,
    mic = true,
    minimumLight = 55,
    players =         {
      &#34;jojo-pti-gros&#34; = true
    },
    teamDescription = &#34;Chaud pour un raid&#34;
}
</code></pre>

<p>我现在的代码</p>

<pre><code>    let fb = Firebase(url:myUrl)
    fb.childByAppendingPath(&#34;/Teams&#34;).observeSingleEventOfType(.Value, withBlock: { teams in
      var teamsArray: = []
      if (teams.value is NSNull) {
            print(&#34;no teams found&#34;)
      } else {
            print(teams.value)
            for team in teams.value as! NSDictionary {
                let newTeam = Team()
                newTeam.dictionaryToTeam(team.value as! NSDictionary)
                newTeam.id = String(team.key)
                for player in newTeam.playerDictionary as NSDictionary {
                  GuardianAPI.sharedInstance.getGuardianByGamertagAndID(player.key as! String, id: player.value as! String, handler: {newGuardian in
                        newTeam.playerDictionary.setValue(newGuardian, forKey: player.key as! String)
                  })
                }
                teamsArray.append(newTeam)
            }
            handler(true)
      }
    })
</code></pre>

<p>我不知道如何使用 SQL 之类的接合点进行查询。
有人知道如何解决这个问题吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>有几个方向可以解决这个问题。</p>

<p>一种选择是读入您的团队节点,将玩家 refs 分离成一个数组,然后遍历该数组以获取每个玩家 ref 并使用单独的 Firebase 调用加载每个玩家</p>

<p>更好的选择是在每个玩家的节点中存储回团队的引用</p>

<pre><code> &#34;Players&#34; : {
      &#34;jojo-pti-gros&#34; : {
         team: &#34;-KBhfH9U3CxQPZiCs5ru&#34;
      }
</code></pre>

<p>观察teams节点加载球队数据,然后查询所有有 child 的球员的球员节点:team = "-KBhfH9U3CxQPZiCs5ru"</p>

<pre><code>Firebase *playersRef = ;
FQuery *query1 = ;   
FQuery *query2 = ;

[query2 observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {

    NSLog(@&#34;key: %@    %@&#34;, snapshot.key, snapshot.value);

}];
</code></pre>

<p>结果将是一个包含所有属于该团队的玩家的快照。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何在一个查询中检索多个数据 Firebase,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/35720686/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/35720686/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何在一个查询中检索多个数据 Firebase