简体   繁体   English

Java MongoDB Pojo自定义ID类型

[英]Java MongoDB Pojo Custom Id Type

I make a class like this 我上这样的课

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

and register to codec 并注册到编解码器

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

When I try to insert 当我尝试插入

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

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

    return user.get_id();
}

But When I find it in mongo, its _id field type is ObjectID but not Int32. 但是,当我在mongo中找到它时,它的_id字段类型是ObjectID而不是Int32。 But I declared _id as Integer, Why? 但是我宣布_id为Integer,为什么?

The default type of id in MongoDB is ObjectID . MongoDB中id的默认类型是ObjectID It could be changed as you create table. 创建表时可以更改它。 It's not decided by the class define in java. 它不是由java中的类定义的。

Actually, MongoDB would implicitly convert int to ObjectID when your code run. 实际上,在您的代码运行时,MongoDB会将int隐式转换为ObjectID

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM