我一直在对这个问题进行一些研究,couchdb 给出了太多的文档冲突。
我已经看到一个解决方案在 nano 中更新 CouchDB 文档,这样说:
- 获取文件
- 保存_rev
- 应用更改
- 尝试使用保存的 _rev 发送更新的文档
- 如果是 409,请转到步骤 1
我试图生成一个函数来完成它,直到最后一步:
nano_update = function ( data, id, callback ) {
var db = this;
db.get( id, function( err, doc ) { //Get _rev of the document
if ( !err ) {
for ( var k in data ) {
//Replace defined information while keeping the other
if ( k.toLowerCase() !== '_rev' ) //Do not override _rev
doc[ k ] = data[ k ];
}
return db.insert( doc, id, callback ); //Insert with _rev to update
}
});
}
//Call it
var database = nano.use( 'databaseName' );
nano_update.call( database, { counter: Math.random() }, 'documentName' );
这接近我的预期,但是,如果我打开 2 个窗口连续发出相同的请求,它将达到 2 个文档冲突导致我的服务器崩溃的地步。
所以,通过说'5。如果出现 409',请转到步骤 1,这是否意味着我必须递归调用相同的函数?如果文档继续冲突,那肯定是一个无限循环,我的服务器将再次崩溃。目前,我正在做的是每 5 秒不允许超过 1 个请求,但这在未来不会做得很好。
如何在 nodejs 中使用 nano 正确处理 409 个冲突的 CouchDB 文档?