如何在具有多个优先级的Firebase中进行排序?

时间:2014-04-06 13:30:25

标签: firebase

我在Firebase中有这样的数据:

mainNode
      pictures
           -JJr1PypNhBOCjSIf_0j
                user: user1
                view: 20
           -JJr1PadFxtUs_wCtj2a
                user: user2
                view: 500
      users
           -user1
                name: 'Austin'
           -user2
                name: 'Bucha'

我有两个案例。

  1. 获取UserX的图片
  2. 按最多视图显示图片
  3. 如果我这样运行,我可以获得案例#1 的预期结果,setPriority userId

    new Firebase("https://xxx.firebaseio.com/pictures")
        .startAt('user1')
        .endAt('user1')
        .once('value', show);
    

    然而,当我想要all pictures sorted by MOST view limit to 10时,我迷失了。 由于setPriority可以使用一次,我如何获得案例#2的结果? 请告诉我一点,以便更好地采取行动并提前感谢。

1 个答案:

答案 0 :(得分:0)

对于用户X的图片,只需将该用户照片的列表(索引)存储在一个单独的位置:

/my_photos/$user_id/$photo_id/<true>
/photos/$photo_id/<data> (with priority for most viewed)

现在要获取查看次数最多,请使用如下调用:

new Firebase(URL).child('photos').endAt().limit(10).once('value', function(snap) {
   console.log('most viewed', snap.val());
});

并获得属于我的那些:

new Firebase(URL).child('my_photos/kato').on('child_added', function(indexSnap) {
   new Firebase(URL).child('photos/'+indexSnap.name()).once('value', function(photoSnap) {
      console.log('one of my photos', console.log(photoSnap.val());
   });
});

FirebaseIndexFirebase.util.join这样的工具可以抽象加入索引和数据的过程:

var fb = new Firebase(URL);
var joined = new FirebaseIndex( fb.child('my_photos/kato'), fb.child('photos') );
joined.on('child_added', function(snap) {
   console.log('one of my photos', snap.val());
});