1

我创建了一些schema.pre('save', function(){...});验证,但后来学到的更新并没有触发它。我真的很想验证更新,所以我开始这样做:

MySchema.findOne({...}, function(doc) {
  doc.set(req.body);
  doc.save(function(){...});
});

这样做有什么缺点吗?这似乎是合乎逻辑的,但我没有看到像使用doc.update({});or那样完成更新的次数MySchema.findXxxAndUpdate({},{})。我意识到update只是将所有内容传递给本机驱动程序,所以设置/保存会导致一些性能损失?原子性如何?

4

1 回答 1

1

您的方法的主要缺点是您失去了更新的原子性,因为在您findOne调用和调用doc.save.

您还将失去各种更新运算符的功能,例如$addToSet提供经过测试的逻辑,否则您必须在代码中实现。

于 2013-07-30T15:01:19.523 回答