我认为这个会更容易,但到目前为止还没有发生。我想迭代一个集合中的所有项目,而不必一次下载每一个项目。
假设我的收藏集位于引用/users
,并且每个用户条目都有一个密钥作为用户名,以便您最终得到
/users/
jonsmith89: {}
janedoe_: {}
...
我没有orderBy()
的字段,因为这些对象中包含嵌入式集合,因此Pagination的文档对我没有帮助。这就是我到目前为止所拥有的
async IterateCollection(path, dataFunction, limit = 10) {
let collection = this.db.collection(path)
.limit(limit);
let current = collection;
let entries = 0;
do {
let snapshot = await current.get();
// Do something with snapshot.docs......
let last = snapshot.docs[snapshot.docs.length - 1];
current = collection.startAfter(last.data())
entries = snapshot.size;
} while (entries > 0);
}
我得到的是一个例外:
指定的游标值太多。指定的值必须与查询的orderBy()约束匹配。
哪种有意义,但我如何通过id(key)订购呢?我尝试了空白orderBy()
以及orderBy('id')
,即使没有ID字段
答案 0 :(得分:0)
startAfter
方法需要DocumentSnapshot
,而不是data
。
startAfter(snapshot: DocumentSnapshot): Query;
因此,您必须删除.data()
current = collection.startAfter(last)