Firestore中如何在指定文档路径下添加LikedUsers子集合的技术咨询
Firestore中如何在指定文档路径下添加LikedUsers子集合的技术咨询
我看了你提供的代码和需求,你核心是想给已存在的PostData文档添加LikedUsers子集合,而不是创建新的PostData文档对吧?现在你的addLike方法里有个关键问题,导致没法定位到目标文档:你用了.collection("PostData").doc(),这里的.doc()会生成一个新的随机文档ID,而不是指向你之前上传图片时创建的那个帖子文档。
下面是具体的修改方案:
1. 明确正确的路径结构
你需要的路径应该是:users/{当前用户ID}/PostData/{具体帖子ID}/LikedUsers
这里的{具体帖子ID}就是你上传图片时生成的那个ido.id(也就是你存在文档里的PostId字段)。
2. 修改addLike方法
要让方法能定位到具体的帖子,需要给它传入对应的postId参数,修改后的代码如下:
// 传入postId参数,指定要点赞的具体帖子 void addLike(bool liked, String postId) { // 定位到目标帖子文档下的LikedUsers集合 CollectionReference collectReef = FirebaseFirestore.instance .collection("users") .doc(user!.uid) .collection("PostData") .doc(postId) // 这里用具体的postId,而不是生成新文档 .collection("LikedUsers"); liked = !liked; if (liked) { DocumentReference reef = collectReef.doc(widget.user); reef.set({ 'nameAR': loggedInUser.username, 'CreationTime': DateTime.now(), }); } }
3. 调用addLike方法时传入正确的postId
在你上传图片的代码里,已经通过ido.update({"PostId":ido.id})把帖子ID存到了文档中。所以当你需要调用addLike的时候,比如从帖子列表点击点赞按钮时,要把该帖子的PostId传递进去。
举个例子,假设你有帖子列表的item,点击时调用:
addLike(currentLikeStatus, postItem['PostId']);
这样就能精准地把LikedUsers子集合创建在你指定的红色文档(PostData文档)下,而不会生成新的文档。
备注:内容来源于stack exchange,提问作者abdou sama
相关产品推荐
相关产品推荐

