从Firebase列表中读取最高优先级的子项

时间:2013-04-11 11:08:52

标签: priority-queue firebase

我希望在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"

但随着列表的增长,每次更新在带宽方面都会非常昂贵。

有更好的方法吗?

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