【问题标题】:How to get the previous document in Firestore如何在 Firestore 中获取上一个文档
【发布时间】:2021-07-10 07:31:20
【问题描述】:

我想浏览我的 firestore 收藏的下一篇和上一篇文章。我已经设置了下一个帖子功能。但是我不能做之前的功能。

这是我的下一个帖子查询:

firestore()
      .collection('Posts')
      .orderBy(firestore.FieldPath.documentId())
      .startAfter(this.state.currentDoc)
      .limit(1)

但遗憾的是,firestore 不适用于 .orderBy(firestore.FieldPath.documentId(), 'desc') 我试过了:

firestore()
      .collection('Posts')
      .orderBy(firestore.FieldPath.documentId())
      .limit(1)

它转到集合的第一个文档。在这里添加升序不再起作用。

如果需要任何进一步的信息,请告诉我。

编辑:

根据答案,这是我正在尝试的,而不是 id,我使用的是帖子创建时的时间。时间格式如:1625511322000

firestore()
      .collection('Posts')
      .orderBy('time', 'desc')
      .startAfter(this.state.currentDoc)
      .limit(1)

【问题讨论】:

    标签: javascript reactjs firebase google-cloud-firestore


    【解决方案1】:

    .startAfter() 方法也应该按降序执行。

    firestore()
          .collection('Posts')
          .orderBy("docID", "desc")
          .startAfter(this.state.currentDoc)
          .limit(1)
    

    假设您有 4 个文档:Doc1、Doc2、Doc3 和 Doc4。

    在第一种情况下,在startAfter 中传递 Doc2 将返回 Doc3。 (假设 DocID 是按升序排列的)。 与获取上一篇文章类似,您可以按降序对列表进行排序并使用startAfter,它应该返回Doc1

    但是,您似乎无法使用this answer 中提到的文档 ID 对文档进行降序排序。因此,您必须将文档 ID 作为字段存储在文档中,然后按如下方式对其进行排序:

    .orderBy("docID", "desc")
    

    如果您尝试使用文档 ID 按降序排序,您最终会收到错误提示,提示您创建索引,但您无法创建它。 Firestore 控制台会返回错误,name only index is not supported”

    【讨论】:

    • 您是否建议添加一个额外的字段 docID?或者那是 Firestore 内置的东西?
    • @Abrar 是的,自己添加并将其设置为文档 ID 的值。您必须这样做才能按降序排列文档。
    • 我正在尝试使用时间,但它不起作用。它只是跳转到第一条记录
    • @Abrar 什么时间?请分享您的文档和更新代码的屏幕截图。
    • 我更新了我的问题,请看一下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多