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不应该来,因为用户没有匹配)。
一旦您在 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"
的节点结束。