我在Firebase中有这样的数据:
mainNode
pictures
-JJr1PypNhBOCjSIf_0j
user: user1
view: 20
-JJr1PadFxtUs_wCtj2a
user: user2
view: 500
users
-user1
name: 'Austin'
-user2
name: 'Bucha'
我有两个案例。
如果我这样运行,我可以获得案例#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的结果?
请告诉我一点,以便更好地采取行动并提前感谢。
答案 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());
});
});
像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());
});