Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 指定要将嵌入式文档解码到的java类型_Mongodb_Mongodb Java - Fatal编程技术网

Mongodb 指定要将嵌入式文档解码到的java类型

Mongodb 指定要将嵌入式文档解码到的java类型,mongodb,mongodb-java,Mongodb,Mongodb Java,我有一个简单的java类型 public class Type1_ { private int number1; private int number2; public Type1_(int number1, int number2) { this.number1 = number1; this.number2 = number2; } public int getNumber1() { return

我有一个简单的java类型

public class Type1_ {

    private int number1;
    private int number2;

    public Type1_(int number1, int number2) {
        this.number1 = number1;
        this.number2 = number2;
    }

    public int getNumber1() {
        return number1;
    }

    public int getNumber2() {
        return number2;
    }

    @Override
    public String toString() {
        return "Type1_{number1=" + number1 + ", number2=" + number2 + '}';
    }

    public static Type1_ random() {
        return new Type1_(new SecureRandom().nextInt(), new SecureRandom().nextInt());
    }
}
为这种类型创建了一个简单的
编解码器
(让记录器知道何时或是否正在使用它们)

创建了一个测试,该测试使用包含
Type1\u编解码器的编解码器注册表,并尝试插入(编码)和读取(解码)
Type1\u

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class Codecs {
    @Test
    public void demonstrate_simpleCustomCodec() {
        final MongoClient mongoClient = buildMongoClientWithCustomCodec(CustomCodecRegistriesFactory.getDefaultWithType1_());
        final MongoDatabase db = mongoClient.getDatabase("db_" + new SecureRandom().nextInt(Integer.MAX_VALUE));
        final String collectionName = "col1";
        db.createCollection(collectionName);
        final MongoCollection<Document> col1 = db.getCollection(collectionName);
        int idCounter = 0;
        final String type1_field = "type1_";

        printTitle("Inserting Documents");
        for (int i = 0; i < 10; i++) {
            /*Encoding is done at insertion*/
            col1.insertOne(new Document(ID, idCounter++).append(type1_field, Type1_.random()));
        }

        printDocumentMongoCollection(col1);
        printMongoCollectionJackson(col1);

        printTitle("Attempting Decoding");
        /*attempt decoding*/
//        final Type1_ type1_value = col1.find().first().get(type1_field, Type1_.class);
//        System.out.println(type1_value);
    }
}
@TestInstance(TestInstance.Lifecycle.PER_类)
公共类编解码器{
@试验
公共空间{
final MongoClient MongoClient=buildmongoclienttwithcustomcodec(customcodecorderegisteresfactory.getDefaultWithType1_());
final MongoDatabase db=mongoClient.getDatabase(“db_3;”+new SecureRandom().nextInt(Integer.MAX_值));
最终字符串collectionName=“col1”;
db.createCollection(collectionName);
最终MongoCollection col1=db.getCollection(collectionName);
int-idCounter=0;
最终字符串类型1\u field=“类型1\u”;
打印标题(“插入文件”);
对于(int i=0;i<10;i++){
/*编码在插入时完成*/
col1.insertOne(新文档(ID,idCounter++).append(type1_字段,type1_u.random());
}
打印文档MongoCollection(col1);
printMongoCollectionJackson(col1);
打印标题(“尝试解码”);
/*尝试解码*/
//final Type1_u1_value=col1.find().first().get(Type1_字段,Type1_u.class);
//系统输出打印LN(类型1_值);
}
}
问题出在解码部分。 如何为MongoClient指定要将特定文档解码为
Type1\uu
type

注释掉的代码将尝试将
文档
强制转换为
类型1
,并将失败。

使用
db.getCollection(collectionName,Type1.class)
来“键入”您的集合。这应该会把你的编解码器拉进来为你自动播放

public class CustomCodecRegistriesFactory {

    public static CodecRegistry getDefault() {
        return MongoClientSettings.getDefaultCodecRegistry();
    }

    public static CodecRegistry getDefaultWithType1_() {
        return CodecRegistries.fromRegistries(CodecRegistries.fromCodecs(new Type1_Codec()), getDefault());
    }

}

public class MongoDBClientConfig {    
    public static MongoClient buildMongoClientWithCustomCodec(final CodecRegistry codecRegistry) {
        return MongoClients.create(MongoClientSettings.builder()
                .applyToClusterSettings(builder -> {
                    builder.hosts(Arrays.asList(new ServerAddress(url(), port())));
                })
                .codecRegistry(codecRegistry)
                .build());
    }
}
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class Codecs {
    @Test
    public void demonstrate_simpleCustomCodec() {
        final MongoClient mongoClient = buildMongoClientWithCustomCodec(CustomCodecRegistriesFactory.getDefaultWithType1_());
        final MongoDatabase db = mongoClient.getDatabase("db_" + new SecureRandom().nextInt(Integer.MAX_VALUE));
        final String collectionName = "col1";
        db.createCollection(collectionName);
        final MongoCollection<Document> col1 = db.getCollection(collectionName);
        int idCounter = 0;
        final String type1_field = "type1_";

        printTitle("Inserting Documents");
        for (int i = 0; i < 10; i++) {
            /*Encoding is done at insertion*/
            col1.insertOne(new Document(ID, idCounter++).append(type1_field, Type1_.random()));
        }

        printDocumentMongoCollection(col1);
        printMongoCollectionJackson(col1);

        printTitle("Attempting Decoding");
        /*attempt decoding*/
//        final Type1_ type1_value = col1.find().first().get(type1_field, Type1_.class);
//        System.out.println(type1_value);
    }
}