Java MongoDB Pojo自定义ID类型

时间:2017-12-30 04:26:26

标签: java mongodb pojo

我做了一个像这样的课程

@BsonDiscrimintor
public class User {
    @BsonId
    private Integer _id;
    // some properties
    // getter & setter
}

并注册到编解码器

ClassModel<User> userModel = ClassModel.builder(User.class).enableDiscriminator(true).build();
PojoCodecProvider pojoCodecProvider = PojoCodecProvider.builder().register(userModel).build();
pojoCodecRegistry = fromRegistries(MongoClient.getDefaultCodecRegistry(), fromProviders(pojoCodecProvider));


mongoClient = new MongoClient("localhost", MongoClientOptions.builder().codecRegistry(pojoCodecRegistry).build());
mongoDatabase = mongoClient.getDatabase("bbs").withCodecRegistry(pojoCodecRegistry);

当我尝试插入

public int addOne(User user) {
    try {
        user.set_id(Db.getNextId("user"));

        userCollection.insertOne(user);
    } catch (Exception e) {
        e.printStackTrace();
    }

    return user.get_id();
}

但是当我在mongo中找到它时,它的_id字段类型是ObjectID而不是Int32。 但我宣布_id为整数,为什么?

1 个答案:

答案 0 :(得分:0)

MongoDB中的默认https://vadzvnik.github.io类型为id。它可以在您创建表时更改。它不是由java中的类定义决定的。

实际上,当代码运行时,MongoDB会隐式地将ObjectID转换为int