4 votes

Comment supprimer un document couchdb avec un identifiant de document "" vide ?

Je vois le document dans la base de données comme ceci : {_id : "", _rev : "1-2f11e026763c10730d8b19ba5dce7565", forbidden : "doit fournir la dernière _rev pour mettre à jour le paquet existant"}

Tout ce que je vois dans la documentation montre que l'on se réfère au document avec l'ID, mais bien sûr, cela ne peut pas se produire.

Je ne sais pas exactement comment cela s'est produit, probablement quelque chose de défectueux entre la chaise et le clavier, mais je voulais savoir s'il y avait une possibilité de réparer cela sans tout recommencer.

7voto

JasonSmith Points 34470

Il existe un bogue dans CouchDB qui permet que cela se produise. Je crois qu'il a été introduit dans la v1.1.0 et qu'il sera corrigé dans les v1.1.1 et v1.2.0.

Le problème est que _update peuvent créer des documents dont l'identifiant est une chaîne vide. Pour supprimer le document, utilisez la même fonction de mise à jour et exploitez le même bogue.

Par exemple :

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

Il suffit d'indiquer la révision qui vous pose problème pour qu'elle soit marquée comme supprimée.

$ 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"}},
]}

0voto

Aaron Arthurs Points 61

Concernant la version 2.1.1 :

Il y a un bug dans le projet Fauxton qui vous permet de cloner un document en laissant le nouvel ID vide. Ni Project Fauxton ni l'API de CouchDB n'offrent un moyen de modifier ou de supprimer les documents dont l'ID est vide.

En Réponse de JasonSmith le del_blank la fonction de mise à jour lance {"error":"illegal_docid","reason":"Document id must not be empty"} . Vous devez donc répliquer la base de données dans une nouvelle base de données, qui stockera les documents avec des ID non vides.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X