Firebase 数据库获取具有限制的子级数据以及开始/结束于

问题描述 投票:0回答:1
post:{
  pushKey1:{
    text:1,
    user:user1
  },
  pushKey2:{
    text:2,
    user:user1
  },
  pushKey3:{
    text:3,
    user:user2
  },
  pushKey4:{
    text:4,
    user:user1
  },
  pushKey5:{
    text:5,
    user:user3
  },
  pushKey6:{
    text:6,
    user:user1
  },
  pushKey7:{
    text:7,
    user:user1
  }
}

我想要 user = user1 的数据,并使用 limit 2 一次获取 2 个数据,并在之前收到的 PushKey 处开始/结束,这样我就可以使用分页了

查询应该是这样的

ref().child("post").orderByChild("user").equalTo("user1").endAt(pushKey4).limitToFirst(2).get();

我期望第一次应该得到数据

pushKey7
pushKey6
,第二次调用
pushkey4
pushkey2
之后,第三次调用应该来
pushKey1
(pushKey3,pushKey5不应该来,因为用户没有匹配)。

flutter firebase firebase-realtime-database
1个回答
0
投票

一旦您在 API 上调用任何

orderBy...
操作,所有过滤操作(
startAt
endAt
equalTo
等)都会对您订购的值起作用。因此,您的
equalTo
endAt
操作都适用于
user
值,因此
endAt
操作不会执行您期望的操作。

如果您想要获取

user
属性为
"user1"
的所有子节点,但以节点 ID/键为
"pushKey4"
的子节点结束,您可以将该键作为第二个参数传递给任何过滤 API 调用。在这种情况下,您需要使用
startAt
endAt
,否则只有一个节点会匹配 - 而您似乎想要结果的一部分。

所以在你的例子中:

ref().child("post")
     .orderByChild("user")
     .startAt("user1")
     .endAt("user1", "pushKey4")

现在数据库将返回

user
属性为
user1
的节点,从第一个节点开始,到 ID/key 为
"pushKey4"
的节点结束。

© www.soinside.com 2019 - 2024. All rights reserved.