架构:
var Post = mongoose.Schema({
title: String,
comments: [{user: Number, text: String}]
});
代码:
oldCount = myPost.comments.length; // for example 'n'
myPost.comments.push({user: 42, text: 'blablabla'});
newCount = myPost.comments.length; // should be 'n+1'
myPost.save(function (err) {
...
});
这是一个合适的代码吗?
save()
之后是否会执行push()
?
我会得到正确的newCount
吗?
答案 0 :(得分:4)
我认为这取决于您的帖子中添加评论的频率
如果它非常频繁,那么您可能希望获得最新的评论计数,这将在您的保存回调中如下:
myPost.comments.push({user: 42, text: 'blablabla'});
myPost.save(function (err, post) {
newCount = post.comments.length
});
请记住,push()在Mongoose中是原子的。换句话说,它使用$push而不是$set(与nonAtomicPush对比)。因此理论上可以同时发生任意数量的其他推送/保存注释,这意味着在给定的示例中,comments.length不一定是n + 1
如果你没有期待很多评论,那么你的例子就足够了。它可能不时不太准确。好处是它会更快一点,因为检索计数将是同步的