当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属性搜索并对结果进行分页,正如您现在可能已经理解的那样,我得到的唯一结果是name等于"hello"的5个第一个结果,并且永远不会到达第六个。

所以

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

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

startAt方法采用可选的第二个参数,即节点的,以防第一个值有多个匹配项。

所以,如果你想在name上订购并在hello上过滤后从uid4开始,那就是:

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

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

最新更新