【问题标题】:Pagination With realtime database in firebase when Child is same当 Child 相同时,使用 Firebase 中的实时数据库进行分页
【发布时间】:2020-11-08 18:54:23
【问题描述】:

我在使用 firebase 进行分页时遇到问题

我每次只能检索 5 个结果:

用一个例子向你展示问题会更容易:

"myDb":{
  "products": {
      "uid1" : {
        "name" : "hello",
        "uid"  : "uid1",
        "size" : "1"
      }
      "uid2" : {
        "name" : "hello",
        "uid"  : "uid2",
        "size" : "2"
      }
      "uid3" : {
        "name" : "hello",
        "uid"  : "uid3",
        "size" : "34"
      }
      "uid4" : {
        "name" : "hello",
        "uid"  : "uid4",
        "size" : "4"
      }
      "uid5" : {
        "name" : "hello",
        "uid"  : "uid5",
        "size" : "15"
      }
      "uid6" : {
        "name" : "hello",
        "uid"  : "uid6",
        "size" : "50"
      }
  }
}

当然这不是我的真实数据,但现在让我向您展示我的查询,我正在使用 angularfire。

  getDatasByQuery(path:string, query:string){
    return this.db.list(path, (ref) => {
        return (ref.orderByChild('name').startAt(query).limitToFirst(5))
    })
  }

所以我实际上做的是在最后一个结果中获取name 属性的值,并用它进行另一个查询以进行分页。唯一的问题是name 始终等于"hello"

当然我可以增加限制,但主要问题保持不变

我希望用户按name 属性搜索并对结果进行分页,正如您现在可能已经理解的那样,我得到的唯一结果是name 等于"hello" 的前5 个结果,并且永远不会达到第六个.

所以

first query ==> ['uid1', 'uid2', 'uid3', 'uid4', 'uid5'] => second query => exactly the same results

非常感谢任何帮助,如果您需要更多解释,请告诉我。

【问题讨论】:

    标签: javascript firebase firebase-realtime-database angularfire


    【解决方案1】:

    startAt 方法接受一个可选的第二个参数,它是节点的 key,以防第一个值有多个匹配项。

    因此,如果您想在name 上订购并在hello 上过滤后从uid4 开始,那就是:

    ref.orderByChild("name").startAt("hello", "uid4");
    

    这里的uid4 是要开始的节点的,通常称为消歧键。

    【讨论】:

      猜你喜欢
      • 2019-06-25
      • 2021-12-16
      • 2019-02-12
      • 2020-07-07
      • 2021-10-12
      • 2019-08-14
      • 2020-10-18
      • 2020-04-13
      相关资源
      最近更新 更多