如何找到引用ObjectId并将其删除?

时间:2018-01-29 10:14:17

标签: node.js mongodb mongoose

所以我有一个Location模式和一个Catch模式。当用户将其catch添加到特定位置时,它会在位置模式中创建ObjectId引用。这就是问题,当用户删除catch时,catch会从Catch架构中删除,但Location模式中的引用ObjectId仍然存在,从而创建一个损坏的引用。我已经在这个问题上工作了几个星期,不知道我是否错过了什么。在过去的几天里,我已经阅读了这些文档并且堆积了这个问题,持续数小时。我曾尝试添加一个预挂钩中间件,但经过几天的调试后,我无法让它工作。这可能与mongoose有关吗?

这是我的位置架构:

var locationSchema = new mongoose.Schema({
    name: String,
    gps: String,
    thumbnail: String,
    image: String,
    description: String,
    catches: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: "Catch"
        }
        ]
});

我的Catch架构:

var catchSchema = mongoose.Schema({
    species: String,
    weight: String,
    image: String,
    catchlocation: String,
    catchlocationid: String,
    description: String,
    timePosted: { type: Date, default: Date.now },
    author: {
        id: {
            type: mongoose.Schema.Types.ObjectId,
            ref: "User"
        },
        username: String
    }
},
   {timestamps: true}
);

编辑:添加了删除捕获路径:

app.delete("/locations/:id/catch/:catchid", isUserPost, function(req, res){
    Catch.findById(req.params.catchid, function(err, post){
        if(err){
            res.redirect("back");
        } else {
        post.remove(function(err){
                    req.flash("success", "Your catch has been deleted.");
                    res.redirect("/locations/" + req.params.id);
        })
        }
    });
});

0 个答案:

没有答案