私のプロジェクトを古い2.13から新しい3.3 javaドライバに変更しています。とにかくドキュメントがDBObjectを置き換えるとすれば、私はそれを置き換えると思った。すべてが魅力のように働いています...(古い)DBが私がそれに投げようとする文書を受け入れていないことを除いて。Java MongoDbドライバ2.13から3.3への移行中のドキュメント対DBObjectの混乱
以前は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);
}
それらの文書は、両端キューに追加されます。 writeToDbはかなり洗練され、
static synchronized void writeToDb(String col, ConcurrentLinkedDeque<Document> comments) {
MongoCollection<Document> collection = database.getCollection(col);
for (Document o : comments) {
collection.insertOne(o);
}
}
は、はい、私は知っている、と私はより良い方法を考え出すだろう。そして、このように挿入する必要があります。 ;)
今のところ、同じ構成のBasiDBObjectsを受け入れたDBはドキュメントを受け付けていないという問題に直面しています。
最初にドキュメントを解析する必要があるように、オブジェクトは内部的にBasicDBObjectとして保存されていますか?あるいは、DBがドキュメントをそのまま受け入れるようにする方法はありますか?DBはそれらを内部的に解析しますか?
古いDBからすべてのオブジェクトを読み込んで新しいオブジェクトを作成し、再解析後に書き戻す必要がありますか? o.O
ありがとうございました。
PS:すでにCRUD Operations infoを読んだことがありますが、ドキュメントオブジェクトをうまく受け入れられない理由が見つかりませんでした。私は明らかに未熟なので、そうだね。 ;)
PPS:興味深いことに私はドキュメントをうまく読むことができます。私が出て行きたいと思う文書の唯一の違いは、_idの欠如です...問題ではないはずです。私はインデックスの問題の可能性についても見てきましたが、URLコレクションはURL(と_id)で一意的に索引付けされ、新しい(異なる)エントリを受け入れる必要があります。
mongoにデータを挿入する際に例外がありますか?いいえ、悲しいことですが、 –
すでに情報を取得しようとしました。 try/Catchで直接insertOneを囲む場合でも、スタックトレースを取得できませんでした。ドキュメントはDBに正しく渡されているようですが、単に「請求書には合わない」と思われます。 –
「文書を受け入れていない」とはどういう意味ですか?症状は何ですか?例外?ドキュメントは表示されません。一般に、データベースは所与のタイプの文書を記憶しない。データベース自体では、それはすべてちょうど圧縮されたjsonです。 DBObject/BasicDBObject/Documentクラスは、ドライバ側の抽象クラスであり、*自由に交換可能でなければなりません。 – mtj