Spring Boot Mongo findById 返回 null

Posted

技术标签:

【中文标题】Spring Boot Mongo findById 返回 null【英文标题】:Spring Boot Mongo findById returns null 【发布时间】:2019-03-14 10:12:13 【问题描述】:

我有一个集合,其中的文档有一个名为 _id 类型为 String 的字段,不是手动生成的。

我一直在尝试使用其 id 获取文档。

    val criteria = Criteria.where("_id").`is`("a2z3e44R")
    val document = mongoTemplate.findOne(Query.query(criteria), MyDocument::class.java) // returns null

    val criteria = Criteria.where("_id").`is`(ObjectId("a2z3e44R"))
    val document = mongoTemplate.findOne(Query.query(criteria), MyDocument::class.java) // returns null

    val document = mongoTemplate.findById("a2z3e44R", MyDocument::class.java) // returns null

    mongoTemplate.findAll(MyDocument::class.java).first  myDocument ->
        myDocument._id == "a2z3e44R"
     // OK...

我的文档是

data class MyDocument(val _id: String, val name: String)

试图通过另一个领域找到一个文档。

知道我可能缺少什么或解决方法吗?

【问题讨论】:

您能否以通过 mongo.exe 或 Robo3T 获取 JSON 文档的方式发布您的 JSON 文档? 【参考方案1】:

你应该像这样指明id的类型

public class Article 

    @MongoId(value = FieldType.OBJECT_ID)
    private String id;

    private String title;

    private String desc;

【讨论】:

这是一个成功的答案【参考方案2】:

Ypu 可以在您的存储库中定义:

public interface MyDocumentRepository extends MongoRepository<MyDocument, String> 
  Pets findBy_id(ObjectId _id);

并使用它:

myDocumentRepository.findBy_id("a2z3e44R");

更多信息see

ObjectId objID = new ObjectId("a2z3e44R");
      query.addCriteria(Criteria.where("_id").lt(objID));

喜欢这个其他答案link

【讨论】:

此解决方案也不起作用。这是我的初始代码。【参考方案3】:

尝试使用注释@Id 标记_id@Id注解用于指定Spring的标识符。

data class MyDocument(@Id val _id: String, val name: String)

【讨论】:

我使用import org.springframework.data.annotation.Id 实施了您的建议,但结果保持不变。 如何持久化新数据? 这是另一个负责添加数据的程序。我只是在阅读它们。

以上是关于Spring Boot Mongo findById 返回 null的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mongo 模板在 Spring Boot 中过滤内部 Arraylist 项的 Mongo 查询

Spring Boot + Mongo + JWT

Dockerize Spring Boot mongo

Spring Boot 连接到运行的 mongo 容器的 MongoDB 副本集

Spring Boot 和 Mongo - 如何通过嵌套属性进行查询

Spring boot / mongo 不会使用索引注释创建索引