在猫鼬中,增量的 model.save 是原子的还是我应该始终使用 $inc?
In mongoose, is model.save atomic for increment or should I always use $inc?
我需要在 MongoDB 和 mongoose 中增加记录的 likes 字段,但我对这些操作的原子性知之甚少 'worried',因为这应该是并发安全的:
Post.findById(id, function(err, post) {
post.update({$inc: {
likes: 1
}});
});
对
Post.findById(id, function(err, post) {
post.likes++;
post.save()
});
它们是否提供相同的安全结果?想想我什至必须减少记录的点赞数(例如,如果用户再次点击点赞按钮)
Post.findById(id, function(err, post) {
post.update({$inc: {
likes: -1
}});
});
MongoDB $inc
是单个文档中的原子操作(参见 mongoDB documentation)。
在第二种情况下,操作不是原子的,因为当模型正在保存时,可能会发送另一个请求,加载的 likes
将具有以前的值。
我需要在 MongoDB 和 mongoose 中增加记录的 likes 字段,但我对这些操作的原子性知之甚少 'worried',因为这应该是并发安全的:
Post.findById(id, function(err, post) {
post.update({$inc: {
likes: 1
}});
});
对
Post.findById(id, function(err, post) {
post.likes++;
post.save()
});
它们是否提供相同的安全结果?想想我什至必须减少记录的点赞数(例如,如果用户再次点击点赞按钮)
Post.findById(id, function(err, post) {
post.update({$inc: {
likes: -1
}});
});
MongoDB $inc
是单个文档中的原子操作(参见 mongoDB documentation)。
在第二种情况下,操作不是原子的,因为当模型正在保存时,可能会发送另一个请求,加载的 likes
将具有以前的值。