为了账号安全,请及时绑定邮箱和手机立即绑定

当 Child 相同时,在 firebase 中使用实时数据库进行分页

当 Child 相同时,在 firebase 中使用实时数据库进行分页

梵蒂冈之花 2023-07-20 15:09:56
我在使用 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属性搜索并对结果进行分页,正如您此时可能已经理解的那样,我得到的唯一结果是第 5 个等于的结果name,"hello"并且永远不会达到第六个。所以first query ==> ['uid1', 'uid2', 'uid3', 'uid4', 'uid5'] => second query => exactly the same results非常感谢任何帮助,如果您需要更多解释,请告诉我。
查看完整描述

1 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

startAt方法采用可选的第二个参数,该参数是在第一个值有多个匹配项时启动的节点的键。

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

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

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


查看完整回答
反对 回复 2023-07-20
  • 1 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信