我查看了一堆其他的SO帖子,发现了不同的方式来做到这一点,所以我想知道哪个是最受欢迎的。我正在教给学生,所以我想给他们最佳实践。将新项目推送到mongoDB文档数组
如果我有以下BlogPost
对象(简体):
var BlogPostSchema = new mongoose.Schema({
body: String,
comments: [String]
});
,我想一个新的评论添加到评论的数组这个博客,我能想到的完成至少3种主要途径这个:
1)将评论推送到Angular中的博客对象,并向/blogs/:blogID
端点提交PUT
请求,使用包含的新评论更新整个博客对象。
2)提交POST
请求到/blogs/:blogID/comments
端点在请求体仅仅是新的评论,发现博客,推到在香草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)提交POST
到/blogs/:blogID/comments
端点的新评论的请求体,然后使用MongoDB的$push
或$addToSet
的表彰添加注释的数组:
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,两者和3基本相同。选项3执行findAndUpdate服务器端(导致1次调用返回更新文档的服务器)。在选项2中,您首先检索blogPost,然后将更新发送到服务器(.save操作),这是对服务器的两个调用。 – HoefMeistert