【问题标题】:Handle 409 conflict document nodejs nano couchdb处理 409 冲突文档 nodejs nano couchdb
【发布时间】:2019-05-23 18:40:13
【问题描述】:

我一直在研究这个问题,couchdb 给了太多document conflicts

我看到Updating a CouchDB document in nano 的解决方案是这样说的:

  1. 获取文档
  2. 保存_rev
  3. 应用更改
  4. 尝试使用保存的 _rev 发送更新的文档
  5. 如果是 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 文档?

【问题讨论】:

    标签: javascript node.js couchdb conflict couchdb-nano


    【解决方案1】:

    您得到 409 的原因是因为 _rev 已过时,因为每次文档更新都会更改它。所以不要坚持_rev

    如果您需要更新多个文档,请尝试使用Bulk Document API,或者您可以使用Partial Update,这有点像您在不指定_rev 的情况下更新文档(它会自动读取@ 987654326@ 来自数据库)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-22
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多