Flutter开发:Firebase能否将列表存入Doc及如何获取集合多文档?
Flutter Firebase Firestore 使用问题解答
1. 能否将列表存入Firebase文档
完全可以。Firestore原生支持数组(列表)类型的字段,你可以直接存入String、int、bool、对象等任意类型元素组成的列表,示例写入代码如下:
// 示例:将关注列表写入用户文档 await FirebaseFirestore.instance .collection("Profiles") .doc(auth.currentUser.displayName) .set({ "followingList": ["user1", "user2", "user3"], // 直接存List类型 }, SetOptions(merge: true));
2. 基于字符串列表批量获取对应文档
现有代码问题说明
你当前代码里两处调用.doc()不传参数的写法是错误的:该方法不传参数时会生成一个随机的新文档ID,既拿不到已存的关注列表,也无法匹配到Posts集合下对应的用户文档。
正确实现逻辑
你的需求实际是两步:
- 第一步:先读取当前用户的关注用户列表
- 第二步:遍历关注列表,拉取每个对应用户发布的Posts内容
修正后代码
Future getPosts() async { // 第一步:获取当前用户的关注列表 DocumentSnapshot followingDoc = await FirebaseFirestore.instance .collection("Profiles") .doc(auth.currentUser.displayName) .collection("Following") .doc("your_following_doc_id") // 替换为你存关注列表的实际文档ID,如果是存在Profiles文档下直接读对应字段即可 .get(); // 提取关注用户的ID/名称列表,假设字段名为followingUsers List<String> followingUsers = List.from(followingDoc.get("followingUsers")); // 第二步:批量拉取所有关注用户的帖子 List<QuerySnapshot> allPosts = []; for (String userId in followingUsers) { QuerySnapshot userPosts = await FirebaseFirestore.instance .collection("Posts") .doc(userId) // 用列表里的用户ID匹配文档 .collection("_Posts") .get(); allPosts.add(userPosts); } // 后续处理allPosts里的所有帖子数据即可 print(allPosts); }
如果你是把关注列表直接存在
Profiles文档下,不需要查Following子集合,直接读Profiles文档的对应列表字段即可,逻辑更简单。
内容的提问来源于stack exchange,提问作者Benjamin Frank
相关产品推荐
相关产品推荐

