在Java操作MongoDB时想在inset后获取到数据库中_id的值,其实是可以在insert成功后直接获取到的,不过有点细节需要注意一下。下面直接结合示例代码来说明:
(1)假设有这样一个实体类:
public class TestDO { private String id; private String name; private String age; private String sex; private String address; private String hobby; public TestDO() { this.id = null; this.name = ""; this.age = ""; this.sex = ""; this.address = ""; this.hobby = ""; } public TestDO(String id, String name, String age, String sex, String address, String hobby) { this.id = id; this.name = name; this.age = age; this.sex = sex; this.address = address; this.hobby = hobby; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getHobby() { return hobby; } public void setHobby(String hobby) { this.hobby = hobby; } @Override public String toString() { return "TestDO{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", age='" + age + '\'' + ", sex='" + sex + '\'' + ", address='" + address + '\'' + ", hobby='" + hobby + '\'' + '}'; } }
(2)插入操作
private final String collectionName = "test_db"; @Autowired private MongoTemplate mongoTemplate; TestDO testDo = new TestDO();
testDo.setId(null); // 最好这样处理一下 mongoTemplate.insert(testDo, collectionName );
String objectId = testDo.getId(); // 获取到ObjectId值了
(3)注意事项
若想能正确获取到_id的值,那么实体类中必须要有id字段属性,同时在示例化时要么在构造函数中将this.id赋值为null,要么在实例化后调用setId(null),总之就是要在insert时一定要让id值为null。