如何在Java MongoDB同步驱动中将BsonValue转换为ObjectId
解决BsonValue转ObjectId的问题
方法一:直接转换(最简便)
InsertOneResult.getInsertedId()返回的BsonValue可以通过asObjectId()方法转为BsonObjectId,再调用getValue()拿到ObjectId实例,直接传入setId():
InsertOneResult result = collection.insertOne(author); author.setId(result.getInsertedId().asObjectId().getValue());
方法二:类型校验(更安全)
如果需要避免潜在的类型转换异常,可以先判断BsonValue的类型再转换:
InsertOneResult result = collection.insertOne(author); BsonValue insertedId = result.getInsertedId(); if (insertedId instanceof BsonObjectId) { author.setId(((BsonObjectId) insertedId).getValue()); }
方法三:利用POJO自动映射(推荐)
给Author类的id字段添加@BsonId注解,MongoDB驱动会自动将插入生成的ID填充到该字段,无需手动处理:
import org.bson.types.ObjectId; import org.bson.codecs.pojo.annotations.BsonId; public class Author { String name; @BsonId ObjectId id; // getters setters constructors }
使用这种方式,插入后author对象的id会被自动赋值,直接返回即可。
内容的提问来源于stack exchange,提问作者James Work account
相关产品推荐
相关产品推荐

