私は他のSOの投稿を見てきましたが、これを行うためのさまざまな方法が見つかっています。私はこれを学生に教えているので、彼らにベストプラクティスを与えたいと思います。新しいアイテムをmongoDBドキュメント配列に貼り付ける
私は、次のBlogPost
オブジェクト(簡体字)がある場合:
var BlogPostSchema = new mongoose.Schema({
body: String,
comments: [String]
});
を、私はこのブログのコメントの配列に新しいコメントを追加したい、私は達成するために、少なくとも3つの主な方法を考えることができます
1)Blogオブジェクトにコメントを「Angular」でプッシュし、/blogs/:blogID
エンドポイントにPUT
リクエストを送信し、新しいコメントを含むブログオブジェクト全体を更新します。
2)、リクエストボディは、単に新しいコメントです/blogs/:blogID/comments
エンドポイントにPOST
要求を提出するブログを見つけ、バニラJSで配列にコメントをプッシュし、それを保存します。
BlogPost.findById(req.params.blogID, function(err, blogPost) {
blogPost.comments.push(req.body);
blogPost.save(function(err) {
if (err) return res.status(500).send(err);
res.send(blogPost);
});
});
OR
3)は、その後、コメントの配列に称賛を追加するためにMongoDBの$push
や$addToSet
を使用して、新しいコメントのリクエストボディとPOST
へ/blogs/:blogID/comments
エンドポイントを提出してください:
BlogPost.findByIdAndUpdate(
req.params.blogID,
{$push: {comments: req.body}},
{safe: true, new: true},
function(err, blogPost) {
if (err) return res.status(500).send(err);
res.send(blogPost);
});
});
私はthis stackoverflow postを見つけました。回答者はオプション2とオプション3について話していますが、基本的には可能な限りオプション2を使用するように言われています。 (そして、私は通常、フックやその他の雑用品を使用できないようにする方法を避けようとしています)
あなたはどう思いますか?何かアドバイス?
私はオプション3に行きます.2と3の両方は基本的に同じです。オプション3では、findAndUpdateサーバー側が実行されます(更新されたドキュメントを返すサーバーへの呼び出しが1回発生します)。オプション2では、最初にblogPostを取得し、サーバーへの2回の呼び出しである更新をサーバーに送信します(.saveアクション)。 – HoefMeistert