我在我的应用程序中使用mongo-java-driver来读取和写入mongodb数据。
我有这样的课程 -
public A{
private String a;
//Getters & Setters
}
public class B{
private String b;
private List<A> a;
//Getters & Setters
}
public class C{
private String c;
private B b;
//Getters & Setters
}
我已经为C类创建了Codec -
public class CCodec implements Codec<C> {
private Codec<Document> documentCodec;
public CCodec(CodecRegistry registry) {
documentCodec = registry.get(Document.class);
}
@Override
public void encode(BsonWriter writer, C c, EncoderContext context) {
Document document = new Document();
document.put("c",c.getC());
document.put("b",c.getB());
documentCodec.encode(writer, document, context);
}
}
B类编解码器 -
public class BCodec implements Codec<B> {
private Codec<Document> documentCodec;
public CCodec(CodecRegistry registry) {
documentCodec = registry.get(Document.class);
}
@Override
public void encode(BsonWriter writer, B b, EncoderContext context) {
writer.writeStartDocument();
writer.writeString("b",b.getB());
//How to encode A Here
writer.writeEndDocument();
}
}
我无法像在CCodec中那样在BCodec中进行编码,因为当我说
时Document document = new Document();
它会创建一个新文档,但我不想将其嵌入到文档C中。
现在问题是如何在B类中编码List类型的字段a? 请参阅BCodec类的编码方法。 不用说我在CodecProvider中添加了所有Codec。
感谢任何帮助。
答案 0 :(得分:1)
您可以尝试使用DocumentCodec.encode
方法,如下所示 -
@Override
public void encode(BsonWriter writer, B b, EncoderContext context) {
org.bson.Document bsonDocument = new org.bson.Document();
List<A> a = B.getA();
bsonDocument.put("a", a);
...
documentCodec.encode(writer, bsonDocument, encoderContext);
}
以及 decode
:
@Override
public B decode(BsonReader reader, DecoderContext decoderContext) {
org.bson.Document bsonDocument = documentCodec.decode(reader, decoderContext);
B b = new B();
b.setA((List)bsonDocument.getString("a"));
...
return b;
}