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

Man*_*rio 5 atomic mongoose mongodb node.js

我需要增加 MongoDB 和 mongoose 中记录的 likes 字段,但我对这些操作的原子性有点“担心”,因为这应该是并发安全的:

Post.findById(id, function(err, post) {
  post.update({$inc: {
      likes: 1
  }});
});
Run Code Online (Sandbox Code Playgroud)

Post.findById(id, function(err, post) {
    post.likes++;
    post.save()
});
Run Code Online (Sandbox Code Playgroud)

它们提供相同的安全结果吗?想想我什至必须减少记录的点赞数(例如,如果用户再次单击点赞按钮)

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

ale*_*mac 3

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

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

  • 从技术上讲,它仍然是原子的。只是不准确。 (2认同)