我只是將項目從舊的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當然)唯一索引,並且應該接受新的(不同的)條目。
在將數據插入mongo時是否有任何異常 –
不是,可悲的是沒有。試圖以這種方式獲得信息。甚至沒有直接用try/catch包圍insertOne,我是否可以獲得任何堆棧跟蹤。看起來文件被正確地交給了數據庫,但只是「不符合法案」。 –
你是什麼意思「不接受文件」?有什麼症狀?例外?文件只是不顯示?通常,數據庫不存儲給定類型的文檔。在數據庫本身中,它只是壓縮的json。 DBObject/BasicDBObject/Document類只是驅動程序端的抽象類,*應*可自由交換。 – mtj