Mongoose,MongoDB:如何在push()之后保存()文档?

时间:2014-02-04 10:06:59

标签: node.js mongodb mongoose

架构:

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吗?

1 个答案:

答案 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

如果你没有期待很多评论,那么你的例子就足够了。它可能不时不太准确。好处是它会更快一点,因为检索计数将是同步的