簡體   English   中英

從Java MongoDb驅動程序2.13遷移到3.3時文檔與DBObject的混淆

[英]Document vs. DBObject confusion while moving from java MongoDb driver 2.13 to 3.3

我只是將項目從舊的2.13更改為新的3.3 Java驅動程序。 現在考慮到Document仍將替換DBObject,我想我將替換它。 一切都像一個魅力……除了(舊的)數據庫不接受我試圖扔給它的文檔之外。

insertOne是否應該像以前使用DBObject一樣接受org.bson.Document?

我的文檔的構建方式如下:

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的DB不能接受Documents。

對象是否在內部存儲為BasicDBObjects,因此我必須首先解析Documents? 還是有一種方法可以讓數據庫在內部解析文檔的情況下接受文檔本身?

還是我必須從舊數據庫中讀取所有對象,創建一個新對象,並在重新解析后將其寫回? O

感謝您的意見。

PS:我已經閱讀了CRUD操作信息 ,但找不到任何理由不能接受我的文檔對象。 我可能沒有經驗,看不到明顯的東西,是的。 ;)

PPS:有趣的是,我可以閱讀文檔。 我取出並嘗試插入的文檔之間的唯一區別是缺少_id ...這應該不是問題。 我也研究了索引問題的可能性,但是url集合僅在url(當然還有_id)上進行唯一索引,並且應該接受新的(不同的)條目。

找到了解決方案。 顯然,代碼完全不同的部分上的一些bool標志被重置了。 您對例外的疑問使我走上了正確的道路,因為存在NON。 這意味着根本沒有數據庫問題。 數據庫正確地聳了聳肩,使其索引中已經有所有文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM