2014-04-06 60 views
3

我有這樣的數據在火力地堡:如何在具有多個優先級的Firebase中進行排序?

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

,我有兩種情況。

  1. 大多數查看
  2. 顯示圖片獲取用戶X的圖片

我可以得到想要的結果爲情況#1,如果我像這樣運行和setPriorityuserId

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的結果? 請爲我提供更好的方法,並提前致謝。

回答

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()); 
    }); 
}); 

FirebaseIndex工具或Firebase.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()); 
}); 
相關問題