如何增加Mongoose中子文档的属性?
我正在使用Mongoose在NodeJS中增加一个对象的子文档的评级。 我将在下面发布模型和路线代码。 当我在Postman中执行查询时,我得到一个空的json对象,并返回一个400错误。 这意味着在查询的某个地方我做错了什么。
blogPost模型
const BlogPostSchema = new Schema({ content: { type: String, validate: { validator: (content) => content.length > 5, message: 'Content must contain at least 6 characters.' }, required: [true, 'Content must be filled in.'] }, rating: Number, title: String, user: { type: Schema.Types.ObjectId, ref: 'user' }, board: {type: Schema.Types.ObjectId, ref: 'board'}, comments: [commentSchema] }); const BlogPost = mongoose.model('blogPost', BlogPostSchema); module.exports = BlogPost;
评论架构
const CommentSchema = new Schema({ content: { type: String, validate: { validator: (content) => content.length > 5, message: 'Content must contain at least 6 characters.' }, required: [true, 'Content must be filled in.'] }, user: { type: Schema.Types.ObjectId, ref: 'user' }, rating: Number }); module.exports = CommentSchema;
NodeJS路由
routes.put('/blogPosts/:id/comment/:idm', function(req, res) { const blogPostId = req.param('id'); const commentId = req.param('idm'); BlogPost.findById(blogPostId) .then((blogPost) => { blogPost.comments.findByIdAndUpdate({_id: commentId}, {$inc: {rating: 1}}); }) .then((blogPost) => res.status(200).json({ 'status': 'Comment rating is increased.' })) .catch((error) => res.status(400).json(error)) });
这是PostMan的回应
所有的帮助表示赞赏。
这是错误的:
BlogPost.findById(blogPostId) .then((blogPost) => { blogPost.comments.findByIdAndUpdate({_id: commentId}, {$inc: {rating: 1}}); }) .then((blogPost) => res.status(200).json({ 'status': 'Comment rating is increased.' }))
应该:
BlogPost.update({_id: blogPostId, 'comments._id': commentId}, {$inc:{'comments.$.rating':1}}) .then((blogPost) => res.status(200).json({ 'status': 'Comment rating is increased.' }))