You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 13:47:43