2014-01-23 36 views
0

我期待找回我的整個對象,但限制我的一個子對象。限制Firebase中對象的子女

例如,假設您使用像firebase這樣的聊天應用程序,並且您要做「房間」。

所以,你可能有

rooms: { 
    mainroom:{ 
     name: something, 
     otherAttrs: mfasfd, 
     messages: { 
      0: { 
       message: something 
       }, 
      1: { 
       message: something else 
      } 
     } 
    } 

我可能在mainroom 300點的消息,但我想它限制在30說。這個例子是基本的,但在我的實際應用中,我的對象是非常相關的,所以我不想進一步規範化。

我可以做一個主房間的電話,然後再做一個小孩的電話,但我想知道是否會再次敲門。在最初的調用中,它會加載所有消息,然後我會將其中的30個加載到子調用中。只是希望有人會有更好的建議。

回答

1

首先閱讀約denormalization。這是一個通過表結構在SQL中強制執行的概念,但在NoSQL中也很重要,儘管您有足夠的繩索來糾纏自己並且度過糟糕的一天。

所以第一步是將郵件拆分成自己的道路:

URL/rooms 
URL/messages 

現在你可以抓住你的元數據和消息分開,並呼籲限制設置裝載數量:

var fbRef = new Firebase(URL); 
var roomRef = fbRef.child('rooms/'+roomId); 
var chatRef = fbRef.child('messages/'+roomId).limit(30); 

如果您不確定這些應該分開,當您想要創建包含房間名稱列表的下拉列表時,您將遇到同樣的問題(您必須將所有消息加載到當前數據中結構,只是爲了獲得房間名稱)。

偉大的正義,將元數據和詳細記錄拆分成自己的路徑。否則,你所有的基地都屬於帶寬。