【问题标题】:Firestore composite query paginationFirestore 复合查询分页
【发布时间】:2021-08-17 15:02:37
【问题描述】:

我正在尝试对复合索引查询进行分页,

let size = data.length
let lastElement = data[size-1].commentCount

db.collection('user-content').orderBy('commentCount','desc').orderBy('likes', 'desc').startAfter(lastElement).limit(10).get()

但我目前收到此错误消息

[未处理的承诺拒绝:FirebaseError:使用无效数据调用的函数 Query.startAfter()。不支持的字段值:未定义]

我认为这与 startAfter(lastElement) 有关

我打开了复合索引,并且在我第一次加载时获取数据(没有 startAfter)

有人知道如何使用复合查询进行分页吗?

我正在使用 Expo SDK41,托管工作流。

【问题讨论】:

  • 你能把你分配给data的代码包括进来吗?

标签: javascript reactjs firebase google-cloud-firestore pagination


【解决方案1】:

您似乎正在使用 NUMBER - (let lastElement = data[size-1].commentCount) - 表示 .startAfter(lastElement) - 有点难以看到,因为您没有向我们展示 data 的定义位置,但名称 commentCount 确实很重要暗示它。

.startAfter() 不需要数字;不存在它可以使用的索引或计数。 .startAfter() 需要一个文档快照 -

https://firebase.google.com/docs/reference/js/firebase.firestore.Query#startafter

...预计来自具有完全相同路径和.where() 子句的查询(即相同的查询)。将其视为“在此文档/我之前查询的快照之后开始”。

【讨论】:

    【解决方案2】:

    是的,你说得对,lastElement 中的问题似乎是undefined。您可以通过添加一些console.log 来检查它。最好看到可重现的代码示例来说明更多,但一般的解决方法应该是这样的:

    let size = data.length
    let lastElement = data[size-1].commentCount || 0 // add a fallback value
    
    db.collection('user-content').orderBy('commentCount','desc').orderBy('likes', 'desc').startAfter(lastElement).limit(10).get()
    

    【讨论】:

      猜你喜欢
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多