2015-04-08 58 views
3

我正在使用Mongo-Java-Driver 2.13我在GridFS中存儲了PDF文件(大小30mb)。我能夠輕鬆地執行插入,刪除和查找操作。如何在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.filesbooks.chunks收藏持續。現在我想更新

  • 案例1:pdf文件
  • 情況2:標題或作者

如何執行這些更新操作在GridFS的案例1

我開始知道我需要維護多個版本的文件並選擇正確的版本。任何人都可以澄清一下嗎?

編輯

我可以更新元數據(標題,作者)很容易。

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的是怎樣的一個的hackish featur的即通常使用一個單獨的文件服務器和一個真正的文件系統來存儲文件內容並且只在MongoDB中存儲元數據通常會更好。

相關問題