我查看了一堆其他的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