如何删除带有空文档ID的couchdb文档?

Jim*_*acs 4 couchdb document

我在db中看到这样的文件:{_ id:"",_ rev:"1-2f11e026763c10730d8b19ba5dce7565",禁止:"必须提供最新_rev来更新现有包"}

我在文档中看到的所有内容都显示了带有ID的文档,但当然这不可能发生.

我不确定这是怎么发生的,很可能是椅子和键盘之间出现问题,但我想知道是否有可能在不重新启动的情况下解决这个问题.

Jas*_*ith 7

CouchDB中存在一个允许这种情况发生的错误.我相信它是在v1.1.0中引入的,将在v1.1.1和v1.2.0中修复.

错误是_update函数可以创建具有空字符串ID的文档.要删除文档,请使用相同的更新功能并利用相同的错误.

例如:

{ "_id": "_design/example",
  "updates": {
    "del_blank":
    "function(doc, req) {
       var doc = {_id:'', _rev:req.query.rev, _deleted:true};
       return [doc, 'Trying to delete nastydoc@'+doc._rev];
     }"
   }
}
Run Code Online (Sandbox Code Playgroud)

只需提供给您带来问题的修订版本,它就会将其标记为已删除.

$ rev="1-2f11e026763c10730d8b19ba5dce7565"
$ curl -XPOST localhost:5984/db/_design/example/_update/del_blank?rev=$rev
Trying to delete nastydoc@1-2f11e026763c10730d8b19ba5dce7565

$ curl localhost:5984/db/_all_docs
{"total_rows":1,"offset":0,"rows":[
{"id":"_design/example","key":"_design/test","value":{"rev":"2-b9bfbedff0c09fab88ff36d06cec0d34"}},
]}
Run Code Online (Sandbox Code Playgroud)