Firebase orderByChild与startAt()和#x27;s第二个参数w/分页未排序

Firebase orderByChild与startAt()和#x27;s第二个参数w/分页未排序,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,我有一个Firebase调用,看起来像这样 ref.child(`floorPosts/${this.props.floorName}`) .orderByChild('numberOfLikes') .limitToLast(15) .once('value', (snapshot) => { var topPosts = []; snapshot.forEach((childSnapsh

我有一个Firebase调用,看起来像这样

      ref.child(`floorPosts/${this.props.floorName}`)
        .orderByChild('numberOfLikes')
        .limitToLast(15)
        .once('value', (snapshot) => {
          var topPosts = [];
          snapshot.forEach((childSnapshot) => {
            var post = childSnapshot.val();
            post.key = childSnapshot.key();
            topPosts.unshift(post);
          });
          this.lastPostKeyTop = topPosts[topPosts.length - 1].key;
          this.setState({
            topPosts,
            isLoading: false
          });
      });
现在我要做的是,当用户滚动到页面底部时,我调用这个函数

ref.child(`floorPosts/${this.props.floorName}`)
    .orderByChild('numberOfLikes')
    .startAt(null, this.lastPostKeyTop)
    .limitToLast(15)
    .once('value', (snapshot) => {
      var topPosts = [];
      snapshot.forEach((childSnapshot) => {
        var post = childSnapshot.val();
        post.key = childSnapshot.key();
        topPosts.unshift(post);
      });
      this.setState({
        topPosts: this.state.topPosts.concat(topPosts),
        isLoading: false,
      });
  });
然而,它连接了与最初相同的前15个结果
.startAt
接受第二个参数,它(我相信)是从firebase获取的最后一个项的键,即初始获取。然而,这在我的情况下似乎不起作用。我有一种预感,这与快照有关。forEach代码。

很抱歉泰勒的回答太晚了

startAt()
的第二个参数仅用于消除与第一个参数匹配的项之间的歧义。因此,您必须同时传入要开始的
numberOfLikes
的值和第一页上最后一项的键(通常称为锚定项)


还要注意,这意味着下一组结果的第一项将与上一组结果的最后一项相同。因此,您需要检索一个额外的项目。

哈哈哈。太神了我正在搜索有关此参数的答案以链接,然后找到了您的问题。仅仅不到两年的时间。:-)后续问题:如果在我们进行第一次查询后,有人单击“喜欢”,会发生什么情况?这意味着第一个参数
numberOfLikes
与数据库中的参数不再匹配。
startAt()
还能正常工作吗?