我一直在研究这个问题,因为couchdb提供了太多document conflicts。
我已经看到了解决方案Updating a CouchDB document in nano这样说:
我已经尝试制作一个功能,直到最后一步:
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文档?
答案 0 :(得分:1)
您获得409的原因是因为_rev
已过时,因为每个文档更新都会更改它。所以不要坚持_rev
。
如果您需要更新多个文档,请尝试使用Bulk Document API,或者使用Partial Update,这类似黑客可以在不指定_rev
的情况下更新文档(它会自动从数据库中读取_rev
。