如何将Firestore用户收藏文档ID传入函数查询对应帖子?
解决类Instagram应用中获取用户收藏帖子的问题
现有代码的问题
FindUserSavedPosts无返回值,无法传递获取到的收藏ID列表- 循环调用
FetchUserSavedPosts逐个查询帖子,效率低下且未收集结果 FetchUserSavedPosts中存在拼写错误:wherefield应为whereField
优化后的解决方案
1. 修改获取收藏帖子ID的函数,返回ID数组
static func fetchUserSavedPostIDs(uid: String) async throws -> [String] { let snapshot = try await Firestore.firestore() .collection("users") .document(uid) .collection("user-saves") .getDocuments() return snapshot.documents.map { $0.documentID } }
2. 修改帖子查询函数,支持批量查询多个ID
static func fetchPostsByIDs(postIDs: [String]) async throws -> [Post] { guard !postIDs.isEmpty else { return [] } let postSnapshot = try await Firestore.firestore() .collection("posts") .whereField("id", in: postIDs) .getDocuments() return try postSnapshot.documents.compactMap { try $0.data(as: Post.self) } }
3. 整合调用,获取用户所有收藏帖子
static func fetchUserSavedPosts(uid: String) async throws -> [Post] { let savedPostIDs = try await fetchUserSavedPostIDs(uid: uid) return try await fetchPostsByIDs(postIDs: savedPostIDs) }
代码说明
fetchUserSavedPostIDs负责从user-saves集合提取所有收藏的帖子ID,返回字符串数组fetchPostsByIDs使用Firestore的whereField(_:in:)批量查询匹配帖子,避免多次请求提升效率fetchUserSavedPosts作为入口函数,先获取ID列表再批量查询,最终返回用户所有收藏帖子
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

