firestore 不支持对单个文档内的数组字段直接分页,因为读取文档时会加载全部数据;而文档大小上限为 1 mib,无法存储“百万级”数据。真正的分页应作用于集合查询,而非文档内部数组。
在 Firestore 的数据模型中,分页(pagination)本质上是针对集合(collection)或查询(query)设计的机制,而非针对单个文档内部的字段(如数组)。当你调用 document.get() 时,SDK 必须完整下载该文档——无论你后续只访问其中几个元素,整个文档内容(包括所有字段和嵌套结构)都会被反序列化到内存中。这意味着:
为支持高效、可扩展的分页,应重构数据结构,将“用户发布的帖子”从嵌入式数组改为独立子集合(subcollection):
# ✅ 推荐:每个用户的帖子作为独立子集合
# 路径示例:users/{uid}/posts/{post_id}
user_posts_ref = db.collection("users").document(user_id).collection("posts")
# 分页查询(服务端分页,真正按需加载)
first_page = user_posts_ref.order_by("created_at", direction=firestore.Query.DESCENDING).limit(10).get()
last_doc = list(first_page)[-1]
next_page = user_posts_ref.order_by("created_at", direction=firestore.Query.DESCENDING)\
.start_after(last_doc).limit(10).get()总之,Firestore 的分页能力与数据建模深度耦合。与其尝试绕过底层限制去
