限制Firebase中对象的子对象

时间:2014-01-23 05:57:19

标签: firebase

我希望找回我的整个对象,但限制我的一个孩子对象。

例如,假设您使用像firebase这样的聊天应用程序并执行“房间”。

所以你可能有

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

我可能在主教室里有300封邮件,但我想将其限制为30说。这个例子是基本的,但在我的实际应用中,我的对象是非常相关的,所以我不想再进一步反规范化。

我可以做一个主教室电话,然后做另一个孩子的电话,但我想知道我是否会被两次打电话。在初始调用中,它会加载所有消息,然后我将使用子调用加载其中30个。只是希望有人会有更好的推荐。

1 个答案:

答案 0 :(得分:1)

首先阅读denormalization。这是一个由SQL结构在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);

如果你不相信这些应该被拆分,当你想要创建一个包含房间名称列表的下拉列表时,你会遇到同样的问题(你必须加载所有的消息)当前的数据结构,只是为了得到房间名称。)

为了获得极大的正义,将元数据和详细记录分成各自的路径。否则,你所有的基地都属于带宽。

相关问题