我的设置与此非常相似: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 =&#34; user&#34;正如我所期待的那样。
但是,如果我想现在查询该对象:
myrepo.findOne("user")
我收到null。调试日志显示我的集合是用
查询的{&#34; id&#34; :&#34;用户&#34; }
而不是&#34; _id&#34;。这种行为是有意的吗?我觉得这很混乱。特别是因为JavaDoc明确提到术语&#34; id&#34;这里。
//编辑:
myrepo.exists("user")
返回true ...
答案 0 :(得分:3)
更改MongoDB中保存的字段名称的功能是使用以下注释: import org.springframework.data.mongodb.core.mapping.Field
通过使用注释,您可以在mongoDB中定义字段名称。
例如:
this.$router.push('/path')
现在 emailAddress 将使用电子邮件键保存在数据库中。
mongoDB将始终使用 _id 作为文档的唯一标识符之一。
如果你有,你可以进行另一个字段调用 userId ,这可以是 _id 字段的重复但是你喜欢的语法,例如:
@Field("email")
private EmailAddress emailAddress;
我希望有所帮助。
答案 1 :(得分:0)
不要使用构造函数
public MyPojo(String id) {
this.id = id
}
因为您不得手动分配 id 。
MongoDB在内部使用此字段,您将要将字符串放入ObjectID字段类型。
只需提供一个空构造函数和/或构造函数,用于初始化属于文档的字段(即 user 的String类型字段。
在指南的链接中,您有一个很好的例子!