我创建了一些schema.pre('save', function(){...});
验证,但后来学到的更新没有触发它。我真的想要更新验证,所以我开始这样做:
MySchema.findOne({...}, function(doc) {
doc.set(req.body);
doc.save(function(){...});
});
这样做有什么缺点吗? 似乎是合乎逻辑的,但我没有看到过这种方式的更新,就像我看到它们使用doc.update({});
或MySchema.findXxxAndUpdate({},{})
完成的那样。我意识到update
只是将所有内容传递给本机驱动程序,因此设置/保存会产生一些性能损失?原子性怎么样?
答案 0 :(得分:1)
您的方法的主要缺点是您失去了更新的原子性,因为在findOne
电话和doc.save
电话之间可能会发生另一次更新。
您也失去了$addToSet
等各种更新运算符的强大功能,这些运算符提供了您必须在代码中实现的经过测试的逻辑。