Javascript 有没有一种方法可以在没有快照的情况下对firebase数据进行分页?
我有一个名为activity的firebase集合,里面有4个文档,时间戳分别为2点、3点、4点和5点 当我这样质疑它的时候Javascript 有没有一种方法可以在没有快照的情况下对firebase数据进行分页?,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我有一个名为activity的firebase集合,里面有4个文档,时间戳分别为2点、3点、4点和5点 当我这样质疑它的时候 let postsQuery = firebase .firestore() .collection(`activity`) .orderBy("timestamp", "desc") .limit(2); 我正确地得到了5点和4点的位置 但是,当我使用以下条件再次调用函数时: //
let postsQuery = firebase
.firestore()
.collection(`activity`)
.orderBy("timestamp", "desc")
.limit(2);
我正确地得到了5点和4点的位置
但是,当我使用以下条件再次调用函数时:
// oldest post is the 4 o'clock document
if (oldestPost) {
postsQuery = postsQuery.startAfter(oldestPost);
}
我又拿到了4号和5号文件。如果我将startAFter更改为任何其他筛选器,则返回0个文档
所以我的问题是,我是做错了,还是不能传入document.data()作为筛选器,而需要传入原始文档?有两个重载:
startAfter(snapshot:DocumentSnapshot)
,我建议您尽可能使用它startAfter(…fieldValues:any[])
,您可以只将文档的字段值传递到其中,然后再开始我建议使用第一个重载的原因是,在某些情况下,可能有多个文档具有相同的字段值。在这种情况下,第一个重载足够聪明,可以使用文档ID消除这些文档之间的歧义,并且不返回任何重叠文档。第二个过载不能保证这一点。所以回答我自己的问题: 当我收到帖子时,我只是把它们存储在一个idMap中
postsQuery
.get()
.then((documents) => {
const typeIdToDocument = {};
documents.forEach((document) => {
const data = document.data();
typeIdToDocument[document.id] = { id: document.id, ...data };
});
然后,当我传入startAfter时,我使用了post的.data()结果。
然而,当-
A) 我传入了原始firebase文档,而不是.data()版本
或者B)我传入了Firebase时间戳,而不是完整的文档
postsQuery = postsQuery.startAfter(oldestFirebaseTimestamp);
显然,不调用文档上的.data(),并将其用作最早的帖子是有效的。耶!对不起,但是。。。我有点好奇,如果您解决了自己的问题,以及您以前调用
.data()
的代码,请您将您的问题更新为原始.data()
代码,以便我们了解您评论背后的上下文?而且,你知道,如果你也能把它贴在一个答案中,并将其标记为已接受,这将有助于其他面临类似问题的人。请,谢谢。谢谢,补充说