这没什么大不了的,但我想把它扔掉——如果你有 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()?