Cloudant CouchDB文档更新冲突

时间:2017-06-09 13:49:36

标签: php couchdb cloudant

出于某种原因,我收到以下错误:

  

致命错误:未捕获的异常' PHPOnCouch \ Exceptions \ CouchConflictException'消息'冲突 - 文档更新冲突。

Fatal error: Uncaught exception 'PHPOnCouch\Exceptions\CouchConflictException' with message 'Conflict - Document update conflict. (PUT /u12345/678bb21541f0ed5e67df1a9070000b55 [])' in /.../vendor/popojargo/php-on-couch/src/Exceptions/CouchException.php:74 
Stack trace: 
    #0 /.../vendor/popojargo/php-on-couch/src/CouchClient.php(168): PHPOnCouch\Exceptions\CouchException::factory(Array, 'PUT', '/u12345...', Array) 
    #1 /.../vendor/popojargo/php-on-couch/src/CouchClient.php(582): PHPOnCouch\CouchClient->_queryAndTest('PUT', '/u12345...', Array, Array, Object(stdClass)) 
    #2 /.../test.php(46): PHPOnCouch\CouchClient->storeDoc(Object(stdClass)) 
    #3 /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Res in /.../vendor/popojargo/php-on-couch/src/Exceptions/CouchException.php on line 74

我删除了修订版,因此我不确定为什么会发生文档更新冲突。

有没有人对此有任何见解?非常感谢。

对象看起来像这样

{
  "_id": "678bb21541f0ed5e67df1a9070000b55",
  "_rev": "3-c0ea1980545a80839677d658eec0df78",
  "name": "Other",
  "timestamp": 0
}

我的代码

$userClient = new CouchClient("http://admin:pass@localhost:8080", "u12345");

$all_documents = $userClient->include_docs(TRUE)->getAllDocs();

foreach ($all_documents->rows as $d) {
    $doc = $d->doc;

    unset($doc->_rev);
    $doc->timestamp = 0;
    $userClient->storeDoc($doc);
}

1 个答案:

答案 0 :(得分:0)

更新文档时,需要提供 _id 。如果此文档已存在,则必须提供_rev。

当您从文档的本地副本中删除_rev时,更新它会导致冲突。为什么?您提供了一份没有_rev的文档,他们希望您提供最新的_rev,以确认您将成为下一个版本。