2011-03-25 18 views
9

Sé que puedo recuperar todas las revisiones de un documento "disponible", pero ¿puedo recuperar la última versión "disponible" de un documento eliminado? No sé la id de revisión antes de la eliminación. Este es el comando que estoy ejecutando actualmente ... devuelve {"error":"not_found","reason":"deleted"}.¿Puedo recuperar todas las revisiones de un documento eliminado?

rizo -X CONSIGO http://localhost:5984/test_database/a213ccad?revs_info=true

+0

¿Se ha realizado una compactación de la base de datos después de la eliminación? – bdargan

+2

El control de versiones de Couch está para servir a sus necesidades, no a las nuestras. Las versiones antiguas no se replican necesariamente, y las versiones antiguas pueden desaparecer durante la compactación. –

+1

Esto no es cierto, siempre se guarda la última versión eliminada de un documento para garantizar la coherencia de la replicación. Solo las revisiones más antiguas se eliminan en la compactación. – smathy

Respuesta

0

He golpeado varias veces recientemente, por lo que para cualquier otra persona vagando por ...

Esta pregunta da lugar típicamente a partir de un modelo de programación que necesita saber qué documento se borrado Debido a que las teclas de usuario como "tipo" no sobreviven a la eliminación y _id se asigna mejor por medio del sofá, a menudo sería bueno destacarse debajo de las cubiertas y ver algo sobre el documento que se eliminó. Una alternativa es tener un proceso que establece eliminado: verdadero (sin guiones bajos) para documentos, y para ajustar los filtros de escucha, etc., para buscar eliminado: verdadero. Uno de los procesos puede eliminar el documento. Esto significa que cualquier desencadenamiento de proceso en el documento no necesita rastrear un _id para su eliminación final.

+0

Puede lograr algo como esto guardando el documento con _deleted: true (y cualquier otro campo que desee almacenar al costado) y teniendo los procesos dependientes en un modelo de programación de este tipo simplemente monitoree _cambios para hacer cualquier limpieza que les guste en respuesta a eliminaciones – natevw

1

Puede obtener la última revisión de un documento eliminado, sin embargo, primero debe determinar primero su id de revisión. Para hacerlo, puede consultar el feed _changes y buscar el registro de eliminación del documento, que contendrá la última revisión y luego podrá obtenerla usando docid?rev=N-XXXXX.

Recuerdo una discusión en la lista de correo para facilitar esto (ya que obviamente no es ideal para el uso rutinario hacer un escaneo completo de los cambios, pero no estoy seguro de que haya nada).

+0

'/ _changes' sigue siendo la única manera. – smathy

6

Tengo este problema, tratando de recuperar el documento eliminado, aquí está mi solución:

0) hasta que se ejecute una compactación, se borran de la historia, por ejemplo:

curl http://example.iriscouch.com/test/_changes 

1) se Veremos documentos eliminados con $ id y $ rev, puesto documento vacío como una nueva versión, por ejemplo:

curl -X PUT http://example.iriscouch.com/test/$id?rev=$rev -H "Content-Type: application/json" -d {} 

2) ahora se puede obtener toda la información revisiones, por ejemplo:

curl http://example.iriscouch.com/test/$id?revs_info=true 

Ver también Retrieve just deleted document

+1

Todavía verá documentos eliminados en _cambios incluso después de una compactación. Una compactación simplemente elimina cuerpos de documentos no hojas, se conservan todos los metadatos de revisión [bien, hasta revs_limit], así como las versiones finales eliminadas de un documento incluso después de la compactación. – natevw

1

Además _changes, otra buena manera de hacer esto es utilizar keys con _all_docs:

GET $MYDB/_all_docs?keys=["foo"] ->

{ 
    "offset": 0, 
    "rows": [ 
     { 
      "id": "foo", 
      "key": "foo", 
      "value": { 
       "deleted": true, 
       "rev": "2-eec205a9d413992850a6e32678485900" 
      } 
     } 
    ], 
    "total_rows": 0 
} 

nota de que ha ser keys; key no funcionará, porque solo keys devuelve información para los documentos eliminados.

+0

Y IIUC puede ENVIAR la lista de claves a la misma URL, si tiene muchas claves. – joeforker

Cuestiones relacionadas