如何根据其他字段的值更改猫鼬模式中的标志?

How can I change the flag in my mongoose schema based on the value of other field?

我将评论存储在以下模型的 mongoose 中:

var CommentsSchema = new Schema({
    username: {type: String, required: true},
    comment_id: {type: String, required: true},
    text_content: {type: String},
    reportedUsers: {type: [String]},
    deleted: {type: Boolean, default: false}
}

我想介绍一种可能性,让用户可以将评论标记为冒犯性 - 在这种情况下,评论将被删除(在我的情况下 - 标记 deleted 将设置为 true) .

当 3 个(或更多)用户将该评论标记为冒犯时,我想更改此标记。

为了避免用户标记同一条评论两次的情况,我想将他的用户名存储在 reportedUsers 数组中。

我的想法是创建一个接受 usernamecomment_id 的端点,并将此 username 添加到数组 reportedUsers。此外,如果 reportedUsers 中的条目数量大于 3 - 它应该将 deleted 标志设置为 true

我目前有以下代码:

commentsRoutes.post('/:commentId/report', function (req, res) {
    var commentId = req.params.commentId;
    var username = req.body.username;

    if (username != undefined) {
        User.findOneAndUpdate(
            {comment_id : commentId },
            {
                $push: {"reportedUsers": username},
            },
            {safe: true, upsert: true, new: true},
            function(err, user) {
                if(err)
                    console.log(err);

                res.json(user);
            }
        );
    }

});

但是如果 reportedUsers 中的条目数大于 3,我如何在这里引入更改标志 deleted 的更改?

在回调中,您可以检查 reportedUsers 数组的长度并将用户更新为

User.findOneAndUpdate(
    { "comment_id": commentId },
    { "$push": { "reportedUsers": username } },
    { "upsert": true, "new": true},
    function(err, user) {
        if(err)
            console.log(err);
        if (user.reportedUsers.length >= 3) 
            user.deleted = true; 
        user.save(function(err, newUser){
            res.json(newUser);
        });                     
    }
);