Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MongoRepository findOne使用;id";而不是",_id";_Java_Spring_Mongodb_Spring Data_Spring Data Mongodb - Fatal编程技术网

Java MongoRepository findOne使用;id";而不是",_id";

Java MongoRepository findOne使用;id";而不是",_id";,java,spring,mongodb,spring-data,spring-data-mongodb,Java,Spring,Mongodb,Spring Data,Spring Data Mongodb,我的设置与此非常相似: 在我的POJO类中,我使用一个字符串字段(用@Id注释)并手动设置它 public class MyPojo { @Id private String id public MyPojo(String id) { this.id = id } //... } 与示例中一样,我使用了MongoRepository的扩展接口: public interface MyPojoRepository extends MongoRepository&l

我的设置与此非常相似:

在我的POJO类中,我使用一个字符串字段(用@Id注释)并手动设置它

public class MyPojo {
  @Id
  private String id

  public MyPojo(String id) {
    this.id = id
  }

  //...
}
与示例中一样,我使用了MongoRepository的扩展接口:

public interface MyPojoRepository extends MongoRepository<MyPojo, String> {

}
一切正常,在我的收藏中_id=“user”正如我所期望的那样

但是,如果我现在要查询该对象:

myrepo.findOne("user")
我收到空的。调试日志显示使用查询我的集合

{“id”:“用户”}

而不是“_id”。这种行为是故意的吗?我觉得这很令人困惑。特别是因为JavaDoc在这里明确提到了术语“id”

//编辑:

myrepo.exists("user") 

返回true…

不使用构造函数

 public MyPojo(String id) {
   this.id = id
 }
因为您不能手动分配id

public class MyPojo {
  @Id
  private String id

  public MyPojo(String id) {
    this.id = id
  }

  //...
}
MongoDB在内部使用此字段,您将把字符串放入ObjectID字段类型中

只需提供一个空构造函数和/或构造函数来初始化作为文档一部分的字段(即用户的字符串类型字段)


在指南的链接中有一个很好的例子!

更改MongoDB中保存的字段名的功能是使用以下注释:

通过使用注释,您可以在mongoDB中定义字段名

例如:

@Field("email")
private EmailAddress emailAddress;
现在,将使用键email将电子邮件地址保存在数据库中

mongoDB将始终使用\u id作为文档的唯一标识符之一

如果有的话,您可以进行另一个字段调用userId,该字段可以是\u id字段的重复,但使用您喜欢的语法,例如:

@Field("id")
private String userId;

我希望这能有所帮助。

我试着给你一个答案。如果答案清楚或者你需要更多信息,请告诉我。