我正在尝试用firebase和swift(但可以用您最喜欢的编程语言回答)创建一个分页过滤列表,而不必过滤客户端上检索到的数据。
假设我有这个结构
matches
match-1
name: "Match 1"
users
user-1: "ok"
user-2: true
match-2
name: "Match 2"
users
user-1: "ok"
user-2: true
user-3: true
match-3
name: "Match 3"
users
user-1: true
user-2: true
user-3: true
...
现在我想得到一个分页列表,其中列出了值为“ok”的user-1的所有匹配项
我在做这样的事
matchesRef
.queryOrdered(byChild: "users/user-1")
.queryEqual(toValue: "ok")
.queryStarting(atValue: "<last-fetched-user-id>")
.queryLimited(toFirst: 5)
.observe(.value, with: { snapshot in
});
但它会导致崩溃,因为“无法调用queryStartingAtValue:queryStartingAtValue或queryEqualToValue之前被调用之后”
有什么建议吗?
最佳答案
如果我没记错,您可以将第一个项的键作为第二个参数传递给queryStarting
。来自documentation(强调我的):queryStartingAtValue:childKey:
用于生成对此位置的数据的有限视图的引用。FIRDatabaseQuery
返回的queryStartingAtValue:childKey
实例将响应节点上值大于startValue或等于startValue且键大于或等于childKey的事件。
所以在代码中:
matchesRef
.queryOrdered(byChild: "users/user-1")
.queryStarting(atValue: "ok", childKey: "<last-fetched-user-id>")
.queryLimited(toFirst: 5)
.observe(.value, with: { snapshot in