我的应用程序使用从发布图像时的时间戳作为优先级,从多个来源收集每张照片(网址)添加到Firebase结构中的照片:
var data = {
createdAt: new Date(2012, 11, 21).getTime(),
url: 'http://placekitten.com/320/240',
likes: 0
}
var images = new Firebase('myapp.firebaseio.com/images')
images.child(createdAt).setWithPriority(data, data.createdAt)
下一个任务是能够按时间顺序或受欢迎程度显示图像列表(喜欢)。
使用child_added
事件以及startAt
和limit
按时间顺序列出和分页它们是相当微不足道的但是我不确定我应该如何构造和查询我的数据按人气顺序观看时。
我有几个方法,但所有这些方法都很粗糙:
答案 0 :(得分:2)
你已经找到了我想要的答案。最多只有一千,我认为你将节省时间和精力,只是在客户端做到这一点。
另一种蛮力方法是,如果您需要在服务器上完成并且不想复制数据,则可以创建索引。这不是一个有效的SQL索引,但它仍然可行,我会把它扔到这里来产生想法。
基本上,你会得到你的照片表:
/photos/$photo_id/ (prioritized by create data)
然后是一个索引:
/photos_indexed_by_likes/$photo_id (prioritized by likes
通过这种方式,你可以这样做:
FB.child('photos_indexed_by_likes').endAt().limit(10).on('child_added', function(snapshot) {
// the snapshot contains the id of a photo, so we fetch it here
FB.child('photos/'+snapshot.val()).once('value', function(ss) {
addPresortedPhotoToList( ss.val() );
});
});
只有实现您要在此页面上显示的记录,这才是可行的。它确实单独请求每张照片,但可能没什么大不了的,除非你为Twitter大小的观众服务:)
总是需要权衡利弊。在这种情况下,您需要交换存储空间以获得带宽:)
更新
顺便说一句,我认为您不需要为创建数据添加排序优先级。这些值按创建时间自然排序。