繁体   English   中英

Firestore 复合查询分页

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM