Как удалить документ couchdb с пустым "" идентификатором документа? - PullRequest
4 голосов
/ 30 сентября 2011

Я вижу документ в БД следующим образом: {_id: "", _rev: "1-2f11e026763c10730d8b19ba5dce7565", запрещено: "должен предоставить последний _rev для обновления существующего пакета"}

Все, что я вижу вдокументы показывают ссылку на документ с идентификатором, но, конечно, этого не может быть.

Я не совсем уверен, как это произошло, скорее всего, что-то не так между стулом и клавиатурой, но я хотелзнать, была ли возможность исправить это, не начав заново.

Ответы [ 2 ]

7 голосов
/ 30 сентября 2011

В CouchDB есть ошибка, которая позволяет этому случиться. Я полагаю, что это было введено в v1.1.0 и будет исправлено в v1.1.1 и v1.2.0.

Ошибка в том, что _update функции могут создавать документы с пустыми идентификаторами строк. Чтобы удалить документ, используйте ту же функцию обновления и используйте ту же ошибку.

Например:

{ "_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];
     }"
   }
}

Просто предоставьте ревизию, которая вызывает у вас проблемы, и она пометит ее как удаленную.

$ 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"}},
]}
0 голосов
/ 05 июля 2018

По версии 2.1.1:

В Project Fauxton есть ошибка, которая позволяет клонировать документ, оставляя новый идентификатор пустым. Ни Project Fauxton, ни API CouchDB не предлагают способа редактирования или удаления документов с пустыми идентификаторами.

В ответе Джейсона Смита функция обновления del_blank выдает {"error":"illegal_docid","reason":"Document id must not be empty"}. Таким образом, вы должны скопировать базу данных в новую базу данных, в которой будут храниться документы с непустыми идентификаторами.

...