update sintaxis registro para modificar masivo desde datos comando actualizar java mongodb gridfs mongodb-java

sintaxis - ¿Cómo realizar operaciones de actualización en GridFS(usando Java)?



update masivo en java (1)

En GridFS no está eliminando / eliminando un solo documento, sino en realidad un montón de documentos (los archivos se dividen en fragmentos y cada fragmento es un documento separado). Eso significa que reemplazar un archivo simplemente no es posible de forma atómica.

Lo que puedes hacer en cambio es:

  1. inserta un nuevo archivo con un nuevo nombre
  2. después de que esto ocurra (use la réplica reconocida de escritura-preocupación), actualice todas las referencias al archivo anterior para apuntar al nuevo
  3. después de obtener una confirmación para esto, puede eliminar el archivo anterior

GridFS es una especie de hackish. A menudo es mejor usar un servidor de archivos separado con un sistema de archivos real para almacenar el contenido del archivo y solo almacenar los metadatos en MongoDB.

Estoy usando Mongo-Java-Driver 2.13 Almacenaba un archivo PDF ( tamaño 30mb ) en GridFS . Puedo realizar la inserción, eliminación y encontrar la operación fácilmente.

MongoClient mongo = new MongoClient("localhost", 27017); DB db = mongo.getDB("testDB"); File pdfFile = new File("/home/dev/abc.pdf"); GridFS gfs = new GridFS(db,"books"); GridFSInputFile inputFile = gfs.createFile(pdfFile); inputFile.setId("101"); inputFile.put("title", "abc"); inputFile.put("author", "xyz"); inputFile.save();

los datos se conservan en books.files y books.chunks collections. Ahora quiero actualizar :

  • Caso 1: archivo pdf
  • caso 2: título o autor

¿Cómo realizar estas operaciones de actualización para el Caso 1 en GridFS?

Llegué a saber que necesito mantener múltiples versiones de mis archivos y elegir la versión correcta. ¿Alguien puede aclararlo?

Editar :

Puedo actualizar metadatos (título, autor) fácilmente.

GridFSDBFile outputFile = gfs.findOne(new BasicDBObject("_id", 101)); BasicDBObject updatedMetadata = new BasicDBObject(); updatedMetadata.put("name", "PG"); updatedMetadata.put("age", 22); outputFile.setMetaData(newMetadata); outputFile.save();