我需要增加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
}});
});
答案 0 :(得分:1)
MongoDB $inc
是单个文档中的原子操作(参见mongoDB documentation)。
在第二种情况下,操作不是原子操作,因为当模型保存时,可以发送另一个请求,并且加载的likes
将具有先前的值。