编程语言
首页 > 编程语言> > java-MongoRepository findOne使用“ id”代替“ _id”

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