java-MongoRepository findOne使用“ id”代替“ _id”
作者:互联网
我有一个非常类似于此的设置:http://spring.io/guides/gs/accessing-data-mongodb/
在我的POJO类中,我使用String字段(用@Id注释)并手动进行设置.
public class MyPojo {
@Id
private String id
public MyPojo(String id) {
this.id = id
}
//...
}
像示例中一样,我使用MongoRepository的扩展接口:
public interface MyPojoRepository extends MongoRepository<MyPojo, String> {
}
当我保存对象时
myrepo.save(new MyPojo("user"));
一切正常,在我的集合_id =“ user”中,正如我期望的那样.
但是,如果我现在要查询该对象:
myrepo.findOne("user")
我收到空值.调试日志显示我的集合被查询
{ “id” : “user” }
而不是“ _id”.这是故意行为吗?我觉得这很令人困惑.特别是因为JavaDoc在这里明确提到了“ id”一词.
//编辑:
myrepo.exists("user")
返回true …
解决方法:
可以使用以下注释来更改保存在MongoDB中的字段名称:
import org.springframework.data.mongodb.core.mapping.Field
通过使用注释,您可以在mongoDB中定义字段名称.
例如:
@Field("email")
private EmailAddress emailAddress;
现在,emailAddress将使用密钥email保存在数据库中.
mongoDB将始终使用_id作为文档的唯一标识符之一.
在这种情况下,您可以使另一个字段调用userId,它可以与_id字段重复,但是使用您喜欢的语法,例如:
@Field("id")
private String userId;
希望对您有所帮助.
标签:mongodb,spring-data,spring-data-mongodb,spring,java 来源: https://codeday.me/bug/20191120/2046133.html