我正在使用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以及如何删除此记录的任何想法?