使用分页按键迭代Firestore集合中的所有项目

时间:2017-12-23 04:08:34

标签: javascript node.js firebase google-cloud-firestore

我认为这个会更容易,但到目前为止还没有发生。我想迭代一个集合中的所有项目,而不必一次下载每一个项目。

假设我的收藏集位于引用/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字段

1 个答案:

答案 0 :(得分:0)

startAfter方法需要DocumentSnapshot,而不是data

startAfter(snapshot: DocumentSnapshot): Query;

因此,您必须删除.data()

current = collection.startAfter(last)