CouchDB DELETE视图返回409,但GET不返回rev

时间:2017-03-26 12:15:21

标签: javascript view couchdb

我正在使用Node.js the Right Way的数据库章节,该章节使用CouchDB并通过REST与JSON交互。在创建视图时,我意外地在错误的URL上执行了PUT:

request({
  method: 'PUT',
  url: 'http://localhost:5984/books/designs/books',
  // Should have been:
  // url: 'http://localhost:5984/books/_design/books',
  json: doc
}

当我尝试删除此记录时,我得到:

DELETE http://localhost:5984/books/designs/books

409 { error: 'conflict', reason: 'Document update conflict.' }

正如Node.js中所强调的那样正确

  

CouchDB通过要求更新现有文档的修订ID来防范冲突和竞争条件。由于我们的请求根本没有包含rev参数,因此它与我们试图删除的文档不匹配。

     

因此,要删除或删除存在的文档,您需要提供修订:

但是GET只返回没有_rev属性的视图的JSON内容:

GET http://localhost:5984/books/designs/books

200 { views: 
{ by_author: 
    { map: 'function (doc) {\n      if (\'authors\' in doc) {\n        doc.authors.forEach(emit);\n      }\n    }',
        reduce: '_count' },
    by_subject: 
    { map: 'function (doc) {\n      if (\'subjects\' in doc) {\n        doc.subjects.forEach((subject) => {\n          emit(subject, subject);\n\n          subject.split(/|s+--|s+/).forEach((part) => {\n            emit(part, subject);\n          });\n        });\n      }\n    }',
        reduce: '_count' } } }

即使我包含?revs_info = true,它仍会在没有_rev属性的情况下提供相同的响应:

GET http://localhost:5984/books/designs/books?revs_info=true

我插入的实际文档确实有_rev个属性,我已成功删除了其中一些属性。关于为什么这个错误似乎没有修订版ID以及如何删除此记录的任何想法?

0 个答案:

没有答案