Java MongoRepository findOne使用;id";而不是",_id";
我的设置与此非常相似: 在我的POJO类中,我使用一个字符串字段(用@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
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;
我希望这能有所帮助。我试着给你一个答案。如果答案清楚或者你需要更多信息,请告诉我。