2016-09-28 30 views
0

我只是將項目從舊的2.13更改爲新的3.3 java驅動程序。現在考慮到Document會替換DBObject,我想我會替換它。一切都像一個魅力......除了(舊)數據庫不接受我試圖拋棄它的文檔。從Java MongoDb驅動程序2.13移動到3.3時,文檔與DBObject混淆混淆

不應該插入一個接受org.bson.Document就好了,因爲它之前採用DBObject?

我的文檔都建這樣的:那麼

static synchronized Document CommentsToDocument(Comment comment) { 
    return new Document().append("source", comment.getSource()).append("date", comment.getDateTime()) 
      .append("author", comment.getAuthor()).append("thread", comment.getThreadID()) 
      .append("commentID", comment.getCommentID()).append("title", comment.getTitle()) 
      .append("comment", comment.getComment()); 
} 

static synchronized Document UrlsToDocument(String url, int counter) { 
    return new Document("url", url).append("count", counter); 
} 

這些文件被添加到雙端隊列。並應插入像這樣:

static synchronized void writeToDb(String col, ConcurrentLinkedDeque<Document> comments) { 
    MongoCollection<Document> collection = database.getCollection(col); 
    for (Document o : comments) { 
     collection.insertOne(o); 
    } 
} 

是的我知道,writeToDb是相當不雅,我會找出更好的方法。 ;)

現在我只面臨這個問題,接受相同組成的BasiDBObjects的數據庫就好,不接受文檔。

對象是否作爲BasicDBObjects內部存儲,因此我必須先解析文檔?或者有沒有辦法讓數據庫接受文檔,數據庫在內部解析它們?

或者我必須讀取舊數據庫中的所有對象,創建一個新對象,並在重新分析後將它們寫回來? o.O

謝謝您的建議。 PS:我已經通過CRUD Operations info已經讀過,但找不到任何理由不接受我的Document Objects就好。我可能沒有經驗,看到明顯的,所以是的。 ;)

PPS:有趣的是,我可以閱讀文檔就好了。我得到並嘗試進入的文檔之間唯一的區別是缺少_id ......這不應該是一個問題。我也研究過索引問題的可能性,但url集合只是通過url(和_id當然)唯一索引,並且應該接受新的(不同的)條目。

+0

在將數據插入mongo時是否有任何異常 –

+0

不是,可悲的是沒有。試圖以這種方式獲得信息。甚至沒有直接用try/catch包圍insertOne,我是否可以獲得任何堆棧跟蹤。看起來文件被正確地交給了數據庫,但只是「不符合法案」。 –

+0

你是什麼意思「不接受文件」?有什麼症狀?例外?文件只是不顯示?通常,數據庫不存儲給定類型的文檔。在數據庫本身中,它只是壓縮的json。 DBObject/BasicDBObject/Document類只是驅動程序端的抽象類,*應*可自由交換。 – mtj

回答

0

找到解決方案。顯然,代碼的完全不同部分上的一些布爾標誌被重置。您的例外問題導致我走在正確的道路上,因爲沒有。這意味着它根本沒有數據庫問題。數據庫正確地聳了聳肩它已經在其索引中的所有文件。