我希望在Firebase的列表中获得最高优先级的孩子,如何在不必将所有孩子留在客户端的情况下这样做?
我能想到的一种方法是将类似数据结构的链表保存到firebase中:
head: 0
nodes:
0: {next: 10}, priority=1
10: {next: 4}, priority=23
4: {next: 2}, priority=45
2: {next: null}, priority=67
然后假设我将0的优先级更新为46
,这会触发on('child_moved')
prevChildName=4
事件,然后我将更新头指针和节点0,10和2的下一个指针因此...
另一种方法是将ID列表保存在1个位置并相应地更新它:
list: "0, 10, 4, 2"
但随着列表的增长,每次更新在带宽方面都会非常昂贵。
有更好的方法吗?
答案 0 :(得分:1)
使用limit()
和endAt()
获得最高优先级。没有参数的endAt
从最高值开始。
var ref = FB.limit(2).endAt();
Here's a fiddle showing it in action。有趣的乐趣! :)
答案 1 :(得分:0)
我可能会遗漏一些东西,但这听起来就像我们的query函数的意思。要获得具有最低优先级编号的项目,您应该能够:
ref.startAt().limit(1).once('child_added', function(childSnapshot) {
// childSnapshot is the item with the lowest priority number (item 0 in your example).
});