它只是我,还是Firebase的默认LIMIT()行为向后工作?

时间:2013-04-28 00:53:47

标签: firebase

这不是什么大问题,但我想把它扔出去 - 如果你有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(...)

实际上,当在没有STARTAT()或ENDAT()的情况下使用LIMIT()时,它实际上就像你用最后一项指定ENDAT()一样。例如,这些产生相同的结果:

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

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

1 个答案:

答案 0 :(得分:3)

您绝对正确地断定默认行为就像使用了endAt()一样(因此将返回最新的项目)。这是因为在最常见的用例中,您需要显示最新数据,而不是最旧的数据;例如:聊天记录或通知。