1

这没什么大不了的,但我想把它扔掉——如果你有 100 个具有递增优先级的项目,你会有一个这样的列表:

item#1: { .priority: 1 }
...
item#100: { .priority: 100 }

第一项是优先级为 1 的 #1,最后一项是优先级为 100 的 #100。现在,如果您 LIMIT() 将列表限制为 3 个项目,如下所示:

firebaseRef.limit(3).once(...)

不是退回项目 1-3,而是退回项目 97-100。大多数人都期待吗?这与限制通常在其他环境中的工作方式相反。例如,在 SQL 中,您从集合的开头开始,并在达到限制时停止。

现在这不是技术限制或任何东西(我相信),因为我们实际上可以通过在第一项上使用 STARTAT() 很容易地获得记录 1-3:

firebaseRef.startAt(1).limit(3).once(...)

事实上,当 LIMIT() 不使用 STARTAT() 或 ENDAT() 时,它的行为实际上就像您在最后一项中指定了 ENDAT() 一样。例如,这些产生相同的结果:

firebaseRef.limit(3).once(...)
firebaseRef.endAt(100).limit(3).once(...)

如果仅指定了 LIMIT(),默认行为是否应该是从第一个位置模仿 STARTAT(),而不是从最后一个位置模仿 ENDAT()?

4

1 回答 1

3

您得出的结论是,默认行为就像endAt()使用过一样有效(因此将返回最新的项目),这是绝对正确的。这是因为在最常见的用例中,您希望显示最新数据,而不是最旧的数据;例如:聊天记录或通知。

于 2013-04-28T01:11:15.083 回答