mongodb java findone_java-MongoRepository findOne使用“ id”代替“ _id”

在我的POJO类中,我使用String字段(用@Id注释)并手动进行设置.

public class MyPojo {

@Id

private String id

public MyPojo(String id) {

this.id = id

}

//...

}

像示例中一样,我使用MongoRepository的扩展接口:

public interface MyPojoRepository extends MongoRepository {

}

当我保存对象时

myrepo.save(new MyPojo("user"));

一切正常,在我的集合_id =“ user”中,正如我期望的那样.

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

myrepo.findOne("user")

我收到空值.调试日志显示我的集合被查询

{ “id” : “user” }

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

//编辑:

myrepo.exists("user")

返回true …

解决方法:

通过使用注释,您可以在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值