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

我在使用 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


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


梵蒂冈之花
浏览 73回答 1
1回答

开满天机

该startAt方法采用可选的第二个参数,该参数是在第一个值有多个匹配项时启动的节点的键。uid4因此,如果您想在订购name并过滤之后开始hello,那就是:ref.orderByChild("name").startAt("hello", "uid4");这里uid4是起始节点的键,通常称为消歧键。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript