2015-04-04 49 views
0

我擁有簡單的用戶和事件數據結構。我想查找所有正在登錄用戶的同一事件的用戶。用戶可以參加多個活動。獲取作爲Firebase中同一組的一部分的項目

我的數據的設置如下

{ 
    events:{ 
     123:{ 
     name: 'event1', 
     users:{ 
      9876: true, 
      7564: true 
     } 
     } 
    }, 
    users:{ 
     9876:{ 
     name: 'John', 
     events:{ 
      123: true 
     } 
     }, 
     7564:{ 
     name: 'Peter', 
     events:{ 
      123: true 
     } 
     } 
    } 
} 

我有下面的代碼來實現這一目標,我只是想知道如果我在正確的道路上,如果我的數據結構是這種類型的查詢(正確Firebaseref是角工廠)

FirebaseRef.child("users/" + authData.uid + "/events").orderByChild('displayName').once("value", function (snap) { 
    snap.forEach(function (event) { 
     FirebaseRef.child("events/" + event.key() + "/users").once("value", function (userSnap) { 
      userSnap.forEach(function (user) { 
       FirebaseRef.child("users/" + user.key()).once("value", function (realUserSnap) { 
        if (realUserSnap.key() != authData.uid) { 
         //This is a user who attends the same event 
        } 
       }); 
      }); 
     }); 
    }); 
}); 

回答

0

我可能會改變從once('value'on('child_added'(和它的其他兄弟姐妹child_*是最外面的查詢)。主要優點是您正在監視/同步數據,而不是一次檢索。一個額外的好處是,它將消除您的第一個需要forEach

除此之外,這看起來很常見。內部調用需要爲once's,因爲您只希望它們執行一次。大多數人會因爲將要發生的電話號碼數量而感到緊張。但是Firebase的數據檢索在初始websocket連接建立之後幾乎沒有開銷,所以這通常表現非常好。

有很多的「應該」,「一般」和「可能」這個答案,因爲只有這樣,才能肯定是你真正:

  • 驗證碼功能上做了什麼你應用程序需要
  • 措施的代碼中,你希望你的用戶遇到

如果碰上高於預期延遲,你可以考慮非規範化的數據遠一點的條件下的性能。例如:您可以在每個事件中保留用戶名,您現在在那裏存儲true。有了這個,你需要查看每個用戶的名字。

相關問題