0

プロジェクトを古い 2.13 から新しい 3.3 Java ドライバーに変更したところです。とにかく Document が DBObject を置き換えようとしているので、私はそれを置き換えると思いました。すべてが魅力のように機能します...(古い)DBが、私が投げようとするドキュメントを受け入れないことを除いて。

以前は DBObject を取っていたので、insertOne は 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 として内部的に保存されていますか? または、DB が内部的にドキュメントを解析して、DB がドキュメントをそのまま受け入れるようにする方法はありますか?

または、古い DB からすべてのオブジェクトを読み取り、新しい DB を作成し、再解析後にそれらを書き戻す必要がありますか? oO

アドバイスありがとうございます。

PS: CRUD 操作に関する情報は既に読みましたが、ドキュメント オブジェクトがうまく受け入れられない理由は見つかりませんでした。私はおそらく、明白なことを見るのに経験が浅いので、そうです。;)

PPS: 興味深いことに、私はドキュメントを問題なく読むことができます。私が取得したドキュメントと取得しようとしたドキュメントの唯一の違いは、_id がないことです...これは問題にはなりません。インデックスの問題の可能性も調べましたが、url コレクションは、url (およびもちろん _id) に対して一意にインデックス付けされているだけであり、新しい (異なる) エントリを受け入れる必要があります。

4

1 に答える 1

0

解決策を見つけました。どうやら、コードのまったく別の部分にある bool フラグがリセットされたようです。NONがあったので、例外に関するあなたの質問は私を正しい道に導きます。つまり、DB の問題はまったくありませんでした。DB は、インデックスに既に存在するすべてのドキュメントを正しく無視しました。

于 2016-09-29T06:44:21.830 に答える