在mongoose中,是model.save原子为增量还是我应该总是使用$ inc?

时间:2016-04-05 22:44:44

标签: node.js mongodb mongoose atomicity

我需要增加MongoDB和mongoose中记录的likes字段,但我很担心'关于这些操作的原子性,因为这应该是同时安全的:

Post.findById(id, function(err, post) {
  post.update({$inc: {
      likes: 1
  }});
});

VS

Post.findById(id, function(err, post) {
    post.likes++;
    post.save()
});

他们是否提供相同的安全结果?想想我甚至会减少记录的喜欢(例如,如果用户再次点击类似按钮)

Post.findById(id, function(err, post) {
  post.update({$inc: {
      likes: -1
  }});
});

1 个答案:

答案 0 :(得分:1)

MongoDB $inc是单个文档中的原子操作(参见mongoDB documentation)。

在第二种情况下,操作不是原子操作,因为当模型保存时,可以发送另一个请求,并且加载的likes将具有先前的值。