2015-04-08 2 views
3

Я использую Mongo-Java-Driver 2.13 Я сохранил файл в формате PDF (размер 30mb) в GridFS. Я могу легко выполнять операции ввода, удаления и поиска.Как выполнять операции обновления в GridFS (используя Java)?

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(); 

данные сохранялись в books.files и books.chunks коллекций. Теперь я хочу обновление:

  • случае 1: Файл PDF
  • случае 2: ​​название или автор

Как выполнить эти операции обновления для случая 1 в GridFS?

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

Edit:

я могу обновить метаданные (название, автор) легко.

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(); 

ответ

2

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

Что вы можете сделать вместо этого:

  1. вставить новый файл с новым именем
  2. после того, как это случилось (используйте реплики признала рецензию беспокойство), обновить все ссылки на старый файл чтобы указать на новый
  3. после вы получили подтверждение этого, вы можете удалить старый файл

GridFS является своим родом хак featur е. Часто лучше просто использовать отдельный файловый сервер с реальной файловой системой для хранения содержимого файла и хранить только метаданные в MongoDB.

Смежные вопросы