Firestore使用orderBy查询集合返回0条文档的问题求助
问题根因
Firestore 执行 orderBy 查询时,会自动过滤所有不存在对应排序字段的文档,并非仅对已有结果排序。你当前查询排序的字段是 ignoreUserIds.Po0fouROHVQnrV1ZR17L8Tql3OJ2,而你的文档中 ignoreUserIds Map 仅存储其他用户ID,不存在该指定字段,因此所有文档都会被过滤,最终返回0条结果。
解决方案
要实现返回所有文档、仅按指定字段排序的需求,可采用以下方案:
- 为集合内所有文档的
ignoreUserIds字段下预先初始化Po0fouROHVQnrV1ZR17L8Tql3OJ2键,默认值可设为false或null这类你期望排在靠前位置的排序值。所有文档都存在该排序字段后,你原有代码即可正常返回全部文档并按规则排序。
示例批量初始化代码如下:
async initField() { const batch = this.firestore.batch(); const allQueueDocs = await this.firestore.collection("queue").get(); allQueueDocs.docs.forEach(doc => { batch.set(doc.ref, { ignoreUserIds: { Po0fouROHVQnrV1ZR17L8Tql3OJ2: false } }, { merge: true }); }); await batch.commit(); }
- 若不想修改原有文档结构,可拆分两次查询拼接结果:先查询所有不存在该字段的文档,再查询存在该字段的文档并按其排序,最后将两次查询结果合并返回即可。
你已经为该字段创建了对应索引,完成字段初始化后即可直接运行原有查询逻辑,无需额外调整。
内容的提问来源于stack exchange,提问作者anonymous-dev
相关产品推荐
相关产品推荐

