2017-02-08 33 views
1

私のアプリケーションでmongo-java-driverを使用してmongodbにデータを読み書きしています。mongodb-java-driverに埋め込みドキュメントのコーデックを書き込む

は、私はこのようなクラスを持っている -

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のために - - 私はこのようなクラスCのためのコーデックを作成している

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 
} 

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(); 
     } 
    } 

私はできませんBCodecでエンコードを行う理由は、私が言うときには、CCodecのためでした。

Document document = new Document(); 

これは、新しいドキュメントを作成しますが、私はそれが今の質問は、私はBクラスでList型のフィールドAのエンコードはどうすればよいです文書C.

に埋め込ま持つことwan't? BCodecクラスのencodeメソッドを参照してください。 言うまでもなく、CodecProviderにすべてのコーデックを追加しました。

何か助けていただければ幸いです。

答えて

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; 
} 
+0

どのようにそれは私が上に書かれているものとは違うのですか? –

+0

@RaviKumar ** //ここでコードをエンコードする方法**あなたのコードでは答えられたことがあります。 * B型のList型のフィールドaをどのようにエンコードするのですか?*は、 'B'をデコードしながら、エンコードされた' A'をリストにキャストした場所です。 – nullpointer

関連する問題