Nic*_* S. 20 mongoose mongodb node.js
我试图了解如何在使用Node.js时使用模型实例时确保同步安全.这里,我在代码示例中使用Mongoose ODM,但问题适用于数据库与Node.js采用的异步事件驱动I/O方法一起使用的任何情况.
请考虑以下代码(使用Mongoose进行MongoDB查询):
MyModel.findOne( { _id : <id #1> }, function( err, doc ) {
MyOtherModel.findOne( { _id : someOtherId }, ( function(err, otherDoc ) {
if (doc.field1 === otherDoc.otherField) {
doc.field2 = 0; // assign some new value to a field on the model
}
doc.save( function() { console.log( 'success' ); }
});
});
Run Code Online (Sandbox Code Playgroud)
在应用程序的单独部分中,可以更新MyModel描述的文档.请考虑以下代码:
MyModel.update( { _id : <id #1> }, { $set : { field1 : someValue }, callback );
Run Code Online (Sandbox Code Playgroud)
在Snippet A中,发出MongoDB查询,并在文档准备好后触发注册的回调.MyModel描述的文档实例保留在内存中(在"doc"对象中).可能会发生以下顺序:
虽然Node以单线程方式运行代码,但在我看来,任何允许运行的事件循环都会为可能过时的数据打开大门.如果这种遵守是错误的,请纠正我.
| 归档时间: |
|
| 查看次数: |
7319 次 |
| 最近记录: |