【问题标题】:Is it just me, or does Firebase's default LIMIT() behavior work backwards?只是我,还是 Firebase 的默认 LIMIT() 行为向后工作?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-05-10
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 2016-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多