首页 > 解决方案 > 查询firestore数据时有没有办法设置范围?

问题描述

我有一个文档集合,所有文档都带有随机 id 和一个名为date.

docs = collection_ref.order_by(u'date', direction=firestore.Query.ASCENDING).get()

想象一下,我将搜索限制在前十个

docs = collection_ref.order_by(date', direction=firestore.Query.ASCENDING).limit(10).get()

当我想从 11 到 20 获取项目时,我将如何继续我的下一个查询?

标签: pythongoogle-cloud-firestorefirebase-admin

解决方案


您可以使用offset(), 但跳过的每个文档都算作阅读。例如,如果您这样做了query.offset(10).limit(5),您将被收取 15 次读取的费用:10 次偏移 + 您实际获得的 5 次。

如果您想避免不必要的读取,请使用startAt()startAfter()

示例(Java,抱歉,不会说 python。这里是文档的链接):

QuerySnapshot querySnapshot = // your query snapshot

List<DocumentSnapshot> docs = querySnapshot.getDocuments();

//reference doc, query starts at or after this one
DocumentSnapshot indexDocSnapshot = docs.get(docs.size());

//to 'start after', or paginate, you can do below:
query.startAfter(indexDocSnapshot).limit(10).get()
                            .addOnSuccessListener(queryDocumentSnapshots -> {
                                // next 10 docs here, no extra reads necessary
                            });

推荐阅读