Firestore数据过滤异常求助:查询返回全部文档而非指定数据
问题分析与解决方案
嘿,我一眼就找到你代码里的问题啦!你虽然创建了带过滤条件的query对象,但完全没使用它,反而直接调用了集合的getDocuments()方法,这就导致Firestore返回了整个集合的所有文档,自然看不到过滤效果。
错误根源
你这段代码里:
query = Firestore.firestore().collection(PTLIST_REF).whereField("hosp", isEqualTo: "hosp1") ptListCollectionRef.getDocuments { (snapshot, error) in // ... 处理逻辑 }
query变量被赋值了带过滤条件的查询,但你后续调用的是ptListCollectionRef.getDocuments()——这是直接获取整个集合的操作,和你定义的query没有任何关系。
修正后的代码
把调用改成使用你定义的query对象来获取文档,同时优化一下可选值的处理(避免强制解包!,防止崩溃):
@IBAction func getData2(_ sender: Any) { if HOSP != "hosp1" { let query = Firestore.firestore().collection(PTLIST_REF).whereField("hosp", isEqualTo: "hosp1") query.getDocuments { (snapshot, error) in if let err = error { debugPrint("error getting data: \(err)") } else if let documents = snapshot?.documents { for document in documents { print(document.data()) } } } } }
额外提示
- 尽量不要用
!强制解包可选值(比如原来的(snapshot?.documents)!),如果snapshot为nil,这会直接导致程序崩溃,用if let进行可选绑定更安全。 - 确认你的
PTLIST_REF常量确实指向了正确的集合路径,避免集合路径错误导致的意外结果。
内容的提问来源于stack exchange,提问作者Eddie
相关产品推荐
相关产品推荐

