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
相关产品推荐
相关产品推荐

