Signalという名前の単純なクラスがあります。クラスは次のようになります。
public class Signal {
private String id;
private Date timestamp;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Date getTimestamp() {
return timestamp;
}
public void setTimestamp(Date timestamp) {
this.timestamp = timestamp;
}
}
MongoDB(v3.4)にシグナルを挿入しようとしています。私は次の方法を使用して挿入しています:
public boolean xyz(Signal signal) {
try {
DatabaseConnection databaseConnection =DatabaseConnection.getInstance();
MongoClient mongoClient = databaseConnection.getMongoClient();
MongoDatabase db = mongoClient.getDatabase("myDb");
MongoCollection<Signal> collection = db.getCollection("myCollection", Signal.class);
collection.insertOne(signal);
return true;
} catch (Exception e){
logger.error("Error", e);
return false;
}
}
次の例外が発生します。
org.bson.codecs.configuration.CodecConfigurationException:クラスin.co.mysite.webapi.models.Signalのコーデックが見つかりません。
同様の質問を確認しました ここ ですが、挿入コードが異なります。私は答えからヒントを得て、私の方法を修正しましたが、それはきれいに見えません。変更された方法は次のとおりです。
public boolean xyz(Signal signal) {
try {
DatabaseConnection databaseConnection =DatabaseConnection.getInstance();
MongoClient mongoClient = databaseConnection.getMongoClient();
MongoDatabase db = mongoClient.getDatabase("myDb");
MongoCollection<Document> collection = db.getCollection("myCollection");
Document doc = new Document();
doc.put("id", signal.getId());
doc.put("timestamp", signal.getTimestamp());
doc.put("_id", new ObjectId().toString());
collection.insertOne(doc);
return true;
} catch (Exception e){
logger.error("Error", e);
return false;
}
}
Bsonからpojoへの変換を管理するCodecRegistry
を構成する必要があります。
MongoClientURI connectionString = new MongoClientURI("mongodb://localhost:27017");
MongoClient mongoClient = new MongoClient(connectionString);
CodecRegistry pojoCodecRegistry = org.bson.codecs.configuration.CodecRegistries.fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), org.bson.codecs.configuration.CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true).build()));
MongoDatabase database = mongoClient.getDatabase("testdb").withCodecRegistry(pojoCodecRegistry);
PS:org.bson.codecs.configuration.CodecRegistries.fromRegistries
とorg.bson.codecs.configuration.CodecRegistries.fromProviders
を静的にインポートできます。
完全な例は github にあります。
Mongodb Javaドライバーのドキュメント には、pojoの管理に関する記事も含まれています(リンクは3.8.0ドライバーバージョン用です)。
POJOのクイックスタートガイドに従ってください。 POJO(Plain Old Java Object)to/from BSON: http://mongodb.github.io/mongo-Java)」の変換を行うには、コーデックを登録する必要があります。 -driver/3.7/driver/getting-started/quick-start-pojo /
Javaクラスに注釈を付けましたか?クラスの上に@Entityが必要で、IDフィールドの上に@Idが必要なようです。