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

Mongoose实现取消关注功能,移除数组中三处对应用户记录

Mongoose 实现取消关注数组元素删除方案

在Mongoose中删除数组内匹配的元素,优先使用$pull原子操作符,可以直接在更新操作里精准移除符合条件的数组项,不需要先查询全量文档再修改保存,性能和并发安全性更好。

完整 /unfollow 路由实现代码

app.post("/unfollow", function (req, res) {
  const id = req.body.idFllw; // 要取消关注的Feed文档ID
  const currentUserId = req.user.id; // 当前登录用户ID

  Feed.findById(id, async (err, foundItemsFollwing) => {
    if (err || !foundItemsFollwing) return res.redirect("/#" + id);
    const targetUserId = foundItemsFollwing.id; // 要取关的用户ID
    try {
      // 对应 ____1____ 位置:删除当前用户关注列表中的目标用户
      await User.updateOne(
        { _id: currentUserId },
        { $pull: { follwing: { id: targetUserId } } }
      );

      // 对应 ____2____ 位置:删除目标用户粉丝列表中的当前用户
      await User.updateOne(
        { _id: targetUserId },
        { $pull: { follwers: { id: currentUserId } } }
      );

      // 对应 ____3____ 位置:删除目标Feed文档粉丝列表中的当前用户
      await Feed.updateOne(
        { _id: id },
        { $pull: { follwers: { id: currentUserId } } }
      );
    } catch (e) {
      console.error("取关操作异常:", e);
    } finally {
      res.redirect("/#" + id);
    }
  });
});

对应逻辑说明

  • 对应____1____位置:原关注逻辑是往当前登录用户的follwing数组推送关注对象信息,取关时通过$pull匹配数组内id等于目标用户ID的项直接删除
  • 对应____2____位置:原关注逻辑是往被关注者User文档的follwers数组推送当前用户信息,取关时匹配该数组内id等于当前用户ID的项删除
  • 对应____3____位置:原关注逻辑是往被关注Feed文档的follwers数组推送当前用户信息,取关时匹配该数组内id等于当前用户ID的项删除

注意:代码中字段名和你原有逻辑、数据库结构完全保持一致,无需额外修改字段拼写。如果需要获取修改后的文档做后续处理,可以将updateOne替换为findByIdAndUpdate方法,匹配规则参数通用。

内容的提问来源于stack exchange,提问作者drg_iulian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:06:03