Swift项目中从Firestore拉取指定ID列表文档无返回如何解决?
问题原因
- 查询条件匹配逻辑错误:你当前使用的
whereField("id", in: [])是查询集合内文档**自定义字段id**的值,而你需要匹配的是Firestore文档的系统级唯一ID,二者不属于同一字段维度,因此无法匹配到结果。 - 额外排查点:
- Firestore的
in查询单次最多支持传入10个ID,若你的查询列表长度超过10,需拆分多批请求后合并结果 - 你示例中给出的ID包含非法字符
H,标准UUID仅支持0-9、A-F范围内的字符,请确认你传入的ID和Firestore控制台中存储的文档ID完全一致,避免拼写错误 - 确认你的Firebase安全规则放开了该集合的读权限,否则会触发权限报错返回空结果
- Firestore的
修复后代码
self.db .collection("examplePath") // 替换为系统文档ID的查询语法 .whereField(FieldPath.documentID(), in: ["1D9815E9-54D4-468E-BF23-791D2AE82DA8", "8D9815E9-54D4-468E-BF23-791D2AE82DA8"]) .addSnapshotListener { querySnapshot, error in guard let documents = querySnapshot?.documents else { print("no documents \(String(describing: error))") return } let result = documents.compactMap { try? $0.data(as: MyModel.self) } print(result) }
你的原有模型定义无需修改,@DocumentID注解会自动将匹配到的文档ID映射到MyModel的id属性中。
内容的提问来源于stack exchange,提问作者neo
相关产品推荐
相关产品推荐

