mongoosejs findByIdAndUpdate最好的方式

时间:2014-02-18 14:29:25

标签: node.js mongodb mongoose

我想知道是否有最佳方法:

/**
 * Article Schema
 */
var PostSchema = new Schema({
    title: {
        type: String,
        required: true,
        trim: true
    },
    author:{
        type: String,
        required: true,
        default: 'whisher'
    },
    slug: {
        type: String,
        index: { unique: true }
    },
    body: {
        type: String,
        required: true,
        trim: true
    },
    avatar:{
        type: String,
        required: true
    },
    status: {
        type: String,
        required: true,
        trim: true
    },
    created: {
        type: Date,
        required: true,
        default: Date.now
    },
    published: {
        type: Date,
        required: true
    },
    categories: {
        type: [String]
    },
    tags: {
        type: [String], 
        required: true,
        index: true
    },
    comment: {
        type: Schema.Types.ObjectId, 
        ref: 'CommentSchema'
    },
    meta: {
        votes: {
            type: Number,
            default: 0
        },
        comments: {
            type: Number,
            default: 0
        } 
    }
});
/**
 * Comment Schema
 */
var CommentSchema = new Schema({
    post_id: {
        type: Schema.Types.ObjectId,
        ref: 'Post',
        required: true
    },
    author:{
        type: String,
        required: true
    },
    email:{
        type: String,
        required: true
    },
    web:{
        type: String
    },
    body: {
        type: String,
        required: true,
        trim: true
    },
    status: {
        type: String,
        required: true,
        default: 'pending'
    },
    created: {
        type: Date,
        required: true,
        default: Date.now
    },
    meta: {
        votes: Number
    }
});
/**
 * Create a comment
 */
exports.create = function(req, res) {
    var comment = new Comment(req.body);
    comment.save(function(err) {
        if (err) {
           return res.jsonp(500,{ error: 'Cannot save the comment' });
        } 
        Post.findById(comment.post_id).exec(function(err, post) {
            if (err) {
               return res.jsonp(404,{ error: 'Failed to load post with id ' + comment.post_id });
            }
            if (!post) {
                return res.jsonp(404,{ error: 'Failed to load post with id ' + comment.post_id });
            }
            post.meta.comments = post.meta.comments++;
            post.save(function(err) {
                if (err) {
                    return res.jsonp(500,{ error: 'Cannot update the post' });
                } 
                res.jsonp(200,comment);
            });
        });
    });
};

顺便说一下,我只看http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate

但是像这样:

Model.findByIdAndUpdate(comment.post_id, { post.meta.comments: post.meta.comments++ })

不起作用

1 个答案:

答案 0 :(得分:3)

我认为您需要使用$inc运算符来增加注释计数,如此...

Post.findByIdAndUpdate(comment.post_id, { $inc: {"meta.comments" : 1} }, callback);