删除嵌套集合中的引用

时间:2019-08-17 21:25:28

标签: node.js express mongoose

我要删除同一作者的所有评论 这些评论存储在mongodb集合中,并且是露营地的一部分(使用引用)

我遍历所有露营地,同时填充其评论数组,然后遍历每个露营地的评论数组,然后,如果要删除评论作者的用户,则在找到评论中的索引后,我使用splice方法删除了评论数组

这里的问题是,拼接方法总​​是跳过注释,我也无法保存删除注释后所做的更改

let campgroundsWithComments = await Campground.find().populate('comments').exec();
campgroundsWithComments.forEach(function(campgroundWithComments) {
    campgroundWithComments.comments.forEach(function(comment) {
        if (comment.author.id.equals(req.params.id)) {
            let commentIndexcampgroundWithComments.comments.indexOf(comment);
            campgroundWithComments.comments.splice(commentIndex, 1);
        }
    });
});
console.log(campgroundsWithComments);
campgroundsWithComments.save();
//user schema
var UserSchema = new mongoose.Schema({
    username: String,
    password: String,
});
module.exports = mongoose.model('User', UserSchema);
//campground schema
var campgroundSchema = new mongoose.Schema({
    name: String,
    description: String,
    comments: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'Comment'
        }
    ]
});
module.exports = mongoose.model('Campground', campgroundSchema);
//comment schema
var commentSchema = mongoose.Schema({
    text: String,
    author: {
        id: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'User'
        },
        username: String
    }
});
module.exports = mongoose.model('Comment', commentSchema);

我得到campgroundsWithComments.save();不是一个函数,但是我确定修改后可以使用该函数将文档保存到db

当我console.log campgroundsWithComments对象时,我看到只有一个注释被删除(每个Campground的初始注释数组都有2个相邻注释要删除,但最后它仅删除了第一个)

尽管每次删除评论之前,我都会找到正确的索引

0 个答案:

没有答案