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

时间:2016-11-23 12:34:07

标签: node.js mongodb mongoose mongoose-schema

我将评论存储在以下模型中的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);
            }
        );
    }

});

但是,如果deleted中的条目数大于3,我如何在此处介绍更改标记reportedUsers的更改?

1 个答案:

答案 0 :(得分:1)

在回调中,您可以检查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);
        });                     
    }
);