MongoRepository findOne 使用 "id" 而不是“_id”
MongoRepository findOne using "id" instead of "_id"
我的设置与这个非常相似:http://spring.io/guides/gs/accessing-data-mongodb/
在我的 POJO class 中,我使用了一个字符串字段(用@Id 注释)并手动设置它。
public class MyPojo {
@Id
private String id
public MyPojo(String id) {
this.id = id
}
//...
}
就像在示例中我使用了 MongoRepository 的扩展接口:
public interface MyPojoRepository extends MongoRepository<MyPojo, String> {
}
当我保存我的 object
myrepo.save(new MyPojo("user"));
一切正常,在我的 collection _id = "user" 中如我所料。
但是,如果我现在想查询object:
myrepo.findOne("user")
我收到空值。调试日志显示我的 collection 被查询
{ "id" : "user" }
而不是“_id”。这种行为是故意的吗?我觉得这很混乱。特别是因为 JavaDoc 在这里明确提到了术语 "id"。
//编辑:
myrepo.exists("user")
returns 真...
不要使用构造函数
public MyPojo(String id) {
this.id = id
}
因为您不能手动分配 id。
MongoDB 在内部使用此字段,您将要将字符串放入 ObjectID 字段类型。
只需提供一个空的构造函数 and/or 构造函数来初始化作为文档一部分的字段(即 user.
的字符串类型的字段
在您的指南的 link 中,您有一个很好的例子!
更改保存在 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;
希望对您有所帮助。
我的设置与这个非常相似:http://spring.io/guides/gs/accessing-data-mongodb/
在我的 POJO class 中,我使用了一个字符串字段(用@Id 注释)并手动设置它。
public class MyPojo {
@Id
private String id
public MyPojo(String id) {
this.id = id
}
//...
}
就像在示例中我使用了 MongoRepository 的扩展接口:
public interface MyPojoRepository extends MongoRepository<MyPojo, String> {
}
当我保存我的 object
myrepo.save(new MyPojo("user"));
一切正常,在我的 collection _id = "user" 中如我所料。
但是,如果我现在想查询object:
myrepo.findOne("user")
我收到空值。调试日志显示我的 collection 被查询
{ "id" : "user" }
而不是“_id”。这种行为是故意的吗?我觉得这很混乱。特别是因为 JavaDoc 在这里明确提到了术语 "id"。
//编辑:
myrepo.exists("user")
returns 真...
不要使用构造函数
public MyPojo(String id) {
this.id = id
}
因为您不能手动分配 id。
MongoDB 在内部使用此字段,您将要将字符串放入 ObjectID 字段类型。
只需提供一个空的构造函数 and/or 构造函数来初始化作为文档一部分的字段(即 user.
的字符串类型的字段在您的指南的 link 中,您有一个很好的例子!
更改保存在 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;
希望对您有所帮助。