【发布时间】:2013-04-28 00:53:47
【问题描述】:
这没什么大不了的,但我想把它扔掉 - 如果你有 100 个具有递增优先级的项目,你会有一个这样的列表:
item#1: { .priority: 1 }
...
item#100: { .priority: 100 }
第一项是优先级为 1 的 #1,最后一项是优先级为 100 的 #100。现在,如果您 LIMIT() 将列表限制为 3 个项目,如下所示:
firebaseRef.limit(3).once(...)
您将收到 97-100 件商品,而不是退回商品 1-3。大多数人都期待吗?这与限制通常在其他环境中的工作方式相反。例如,在 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()?
【问题讨论】:
标签: firebase