当 Child 相同时,在 firebase 中使用实时数据库进行分页
Pagination With realtime database in firebase when Child is same
我在使用 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
非常感谢任何帮助,如果您需要更多解释,请告诉我。
startAt
方法采用可选的第二个参数,即节点的 key 开始,以防第一个值有多个匹配项。
因此,如果您想在 name
上订购并在 hello
上过滤后从 uid4
开始,那就是:
ref.orderByChild("name").startAt("hello", "uid4");
这里的uid4
是开始的节点的key,通常称为消歧键。
我在使用 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
非常感谢任何帮助,如果您需要更多解释,请告诉我。
startAt
方法采用可选的第二个参数,即节点的 key 开始,以防第一个值有多个匹配项。
因此,如果您想在 name
上订购并在 hello
上过滤后从 uid4
开始,那就是:
ref.orderByChild("name").startAt("hello", "uid4");
这里的uid4
是开始的节点的key,通常称为消歧键。