【问题标题】:How to delete the posts of user while deleting user删除用户时如何删除用户的帖子
【发布时间】:2021-10-19 16:45:02
【问题描述】:
router.delete('/delete',authenticate,async(req, res)=>{
const user = User.findById(req.rootUser._id)
{
    try{
        await Post.deleteMany({postedBy:rootUser})
        await User.findByIdAndDelete(req.rootUser._id)
        res.status(200).json(err);
    }catch(err){
        res.status(500).json(err);
    }
}
})

rootUser是用户,我们可以通过认证访问。

如果我使用 id 方法,例如 router.delete(':/id...... 那么如何访问帖子,因为帖子ID与用户ID不同。

后架构:

const mongoose = require('mongoose');
const {ObjectId} = mongoose.Schema.Types
const postSchema = new mongoose.Schema({
    heading:{
        type:String,
        required: true
    },
    confess:{
        type: String,
        required:true
    },
    likes:[{type:ObjectId,ref:"USER"}],
   postedBy:{
        type: ObjectId,
        ref: "USER"
    }
});

const Post = module.exports = mongoose.model('POST', postSchema);
module.exports = Post;

【问题讨论】:

  • 注意:这确实应该是一个事务,所以如果一个失败,则会回滚,并且只有在两个查询都成功时才提交。 mongoosejs.com/docs/transactions.html - 现在的代码可能有一个承诺失败而另一个承诺成功。

标签: node.js mongodb express mongoose mern


【解决方案1】:

由于postedBy 字段是ObjectId 类型,因此当您搜索要删除的帖子时,您必须传入用户的_id。因此你必须这样做:

await Post.deleteMany({postedBy: req.rootUser._id})

而不是仅仅寻找rootUser,因为首先,rootUser 是未定义的(应该是req.rootUser),我们需要rootUser 的_id => req.rootUser._id

【讨论】:

  • 那么请点赞并将答案标记为正确?
猜你喜欢
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
  • 2019-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多