[英]Firestore composite query pagination
我试图对复合索引查询进行分页,
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()
但我目前收到此错误消息
[未处理的 promise 拒绝:FirebaseError:Function Query.startAfter() 使用无效数据调用。 不支持的字段值:未定义]
我认为它与 startAfter(lastElement)
我打开了复合索引,并且在我第一次加载时获取数据(没有 startAfter)
有谁知道如何使用复合查询进行分页?
我使用 Expo SDK41,管理工作流。
看来您正在使用 NUMBER - ( let lastElement = data[size-1].commentCount
) - for .startAfter(lastElement)
- 有点难以看到,因为您没有向我们展示data
的定义位置,但 NAME commentCount
确实暗示了这一点。
.startAfter()
不需要数字; 不存在它可以使用的索引或计数。 .startAfter()
需要一个 DOCUMENT SNAPSHOT -
https://firebase.google.com/docs/reference/js/firebase.firestore.Query#startafter
...预计来自具有 EXACT SAME path(s) 和.where()
子句的查询(即相同的查询)。 将其视为“从我的上一个查询的此文档/快照之后开始”。
是的,你说对了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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.