De acuerdo con CouchDB Wiki on PUT operations.¿Se está actualizando a granel una base de datos CouchDB sin un valor _rev por documento?
Para actualizar un documento existente, también emite una solicitud PUT. En este caso, el cuerpo JSON debe contener una propiedad _rev, que le permite a CouchDB saber en qué revisión están basadas las ediciones. Si la revisión del documento almacenado actualmente en la base de datos no coincide, se devuelve un error de conflicto 409.
Mi objetivo es llevar a cabo una actualización de bulk_docs:
curl -X POST [domain]/[couch db name]/_bulk_docs -H "Content-type: application/json" -d @[some document].json
Mi flujo de trabajo es la siguiente:
- Mi datos están en una hoja de cálculo de Google Docs.
- que convertir los datos de hoja de cálculo para JSON por copiar y pegar en Mr. Data Converter
- utilizo CURL (como se muestra arriba) para añadir documentos/actualización
El problema es que la primera vez que añadir nuevos documentos, todo funciona perfectamente, sin embargo, la próxima vez que publico los mismos documentos, obtengo un error de seguimiento para cada documento:
... {"id": "28", "error": "conflicto", "razón ":" Conflicto de actualización del documento ".} ...
¿Hay alguna manera de actualizar un documento existente sin incluir una propiedad _rev?
El controlador de actualización parece ser el camino a seguir para actualizar los datos. Será más rápido porque no tiene que descargar todos los documentos, fusionar el lado del cliente y subirlo nuevamente. ¡En su lugar, el manejador de actualizaciones puede hacer la fusión por usted con 1/3 de la actividad de la red! –
@DobesVandermeer que no es universal. Como el controlador de actualizaciones no admite operaciones por lotes, esa es una solicitud por actualización/persistencia. Si necesita hacer más de 2-4 de ellos al mismo tiempo, realice operaciones por lotes porque generalmente se necesitan entre 2 y 4 solicitudes según las circunstancias, por ejemplo, para actualizar 10 documentos. Por supuesto, si usa '" new_edits ": falso' puede continuar/reemplazar lote en 1 solicitud, pero tenga en cuenta que' new_edits' es [destinado a ser utilizado por el replicador] (http://goo.gl/EFFofn))Un inconveniente es que no conserva el historial de revisión, me pregunto si eso podría interferir con la replicación ... –
@DominykasMostauskis ah sí, buen punto. El OP podría querer hacer una descarga por lotes, calcular los nuevos valores y cargar lotes, que son menos transacciones en general. Mientras todo encaje en la memoria. –