我希望找回我的整个对象,但限制我的一个孩子对象。
例如,假设您使用像firebase这样的聊天应用程序并执行“房间”。
所以你可能有
rooms: {
mainroom:{
name: something,
otherAttrs: mfasfd,
messages: {
0: {
message: something
},
1: {
message: something else
}
}
}
我可能在主教室里有300封邮件,但我想将其限制为30说。这个例子是基本的,但在我的实际应用中,我的对象是非常相关的,所以我不想再进一步反规范化。
我可以做一个主教室电话,然后做另一个孩子的电话,但我想知道我是否会被两次打电话。在初始调用中,它会加载所有消息,然后我将使用子调用加载其中30个。只是希望有人会有更好的推荐。
答案 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);
如果你不相信这些应该被拆分,当你想要创建一个包含房间名称列表的下拉列表时,你会遇到同样的问题(你必须加载所有的消息)当前的数据结构,只是为了得到房间名称。)
为了获得极大的正义,将元数据和详细记录分成各自的路径。否则,你所有的基地都属于带宽。