我正在尝试用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

10-08 02:43