Mongoosejs设置/保存与更新以进行验证

时间:2013-07-30 14:52:44

标签: node.js mongoose

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

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

这样做有什么缺点吗? 似乎是合乎逻辑的,但我没有看到过这种方式的更新,就像我看到它们使用doc.update({});MySchema.findXxxAndUpdate({},{})完成的那样。我意识到update只是将所有内容传递给本机驱动程序,因此设置/保存会产生一些性能损失?原子性怎么样?

1 个答案:

答案 0 :(得分:1)

您的方法的主要缺点是您失去了更新的原子性,因为在findOne电话和doc.save电话之间可能会发生另一次更新。

您也失去了$addToSet等各种更新运算符的强大功能,这些运算符提供了您必须在代码中实现的经过测试的逻辑。