0

我想在 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 列表保存在一个位置并相应地更新它:

list: "0, 10, 4, 2"

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

有一个更好的方法吗?

4

2 回答 2

1

使用limit()endAt()获得最高优先级。endAt没有参数的从最大值开始。

var ref = FB.limit(2).endAt();

这是一个在行动中展示它的小提琴。好玩好玩好玩!:)

于 2013-04-11T16:03:36.357 回答
0

我可能遗漏了一些东西,但这听起来正是我们的查询函数的用途。要获得优先级最低的项目,您应该能够:

ref.startAt().limit(1).once('child_added', function(childSnapshot) {
  // childSnapshot is the item with the lowest priority number (item 0 in your example).
});
于 2013-04-11T15:44:51.907 回答