Swift Firebase设置数据报错:无法为Query添加.collection方法
解决Firestore查询后访问子集合的问题
你说得没错,whereField方法返回的是Query对象,它代表一组符合条件的文档,而非单个文档或集合,因此确实没有.collection()方法。要实现需求,你需要先获取查询到的所有符合条件的tweets文档,再逐个操作它们的comments子集合。
修改后的代码示例
let placeHolder = ["place": ""] let db = Firestore.firestore() // 1. 执行查询,获取所有uid匹配的tweets文档 db.collection("tweets").whereField("uid", isEqualTo: uid).getDocuments { snapshot, error in guard let snapshot = snapshot, error == nil else { print("查询失败: \(error?.localizedDescription ?? "未知错误")") return } // 2. 遍历每个符合条件的文档,操作其子集合 for document in snapshot.documents { // 获取当前tweet文档的comments子集合中的指定文档 let commentDocRef = document.reference.collection("comments").document("hello") // 设置数据 commentDocRef.setData(placeHolder) { setError in if let setError = setError { print("设置数据失败: \(setError.localizedDescription)") } else { print("数据设置成功,文档路径: \(commentDocRef.path)") } } } }
关键说明
- 先通过
getDocuments执行查询,获取所有匹配的tweets文档快照。 - 遍历快照中的每个文档,通过
document.reference拿到该文档的引用,再链式调用.collection("comments")访问子集合。 - 如果需要优化性能,可使用
WriteBatch批量提交所有设置操作,减少网络请求次数。
内容的提问来源于stack exchange,提问作者Ahmed Zaidan
相关产品推荐
相关产品推荐

