首页 > 解决方案 > Firebase 使用 orderBy 和 endAt

问题描述

"-MSxxx": {
        "category": "Firuit",
        "isBeverage": true,
        "title": "Orange"
    },
    "-MQxxx": {
        "category": "Firuit",
        "isBeverage": false,
        "title": "Orange Juice"
    },

我有类似上面输出的数据。我使用 endAt () 和 limitToLast 参数将新数据加载为滚动。

Firebase 不允许我同时使用 orderBy 和 endAt() 参数。orderBy = "isBeverage" & equalTo = true & endAt = "- MSxxx" & limitToLast = 10。

当我向客户询问时,我遇到了问题。由于我列出了最后 10 个主题,因此如果该列表中不包含饮料,我将无法列出健康的列表。

我怎么能这样使用它?

标签: javascriptfirebasefirebase-realtime-database

解决方案


问题不在于一起使用orderByendAt,而是一起使用equalToendAt

startAt, equalTo, 和endAt, 都接受第二个参数,这是它们各自结果的关键。orderByChild("isBeverage").startAt(true, "-MQ")读作:获取所有子节点isBeveragetrue但子节点的键必须等于或大于-MQ

如果您想获取isBeverage值为 的所有子true项,直到具有键的子项-MSxxx,您可以使用以下查询:

const query = firebase.database()
  .ref('/path/to/data')
  .orderByChild("isBeverage")
  .startAt(true /* startAt value for isBeverage */)
  .endAt(true /* endAt value for isBeverage */, "-MSxxx" /* key of last result */)

如果您想获取所有isBeverage值为的子项,并使用true以 开头的键,则-MS可以使用:

const query = firebase.database()
  .ref('/path/to/data')
  .orderByChild("isBeverage")
  .startAt(true, "-MS")
  .endAt(true, "-MS\uf8ff")

推荐阅读