1
私は、オブジェクトのサブ文書の格付けをインクリメントするMongooseを使ってNodeJSで経路を作っています。私は以下のモデルとルートコードを投稿します。 Postmanでクエリを実行すると、空のjsonオブジェクトが返され、400エラーが返されます。これは、クエリのどこかで何か間違っていることを意味します。Mongooseでサブ文書のプロパティを増やすにはどうすればよいですか?
ブログ投稿のモデル
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))
});
これは番目ですeレスポンスPostMan
すべてのご協力をお願いいたします。
'findByIdAndUpdate()'メソッドは思わ名。あなたは 'blogPost.comments.findByIdAndUpdate(commentId、{$ inc:{rating:1}}))ではないはずですか?代わりに 'findOneAndUpdate()'メソッドを代わりに使用することもできます。ドキュメントは同意するようです:http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate –
質問/説明のカップル: 1. req.paramの代わりにreq.params 2. 'blogPost.comments.findByIdAndUpdate 'これは有効ですか?私は前にこのように働いたことがないので推測しています。 3. B.Flemingが述べたように、 'findByIdAndUpdate'は最初のパラメータとして' id'を取ります。それをクエリとして入れる必要はありません。 –