Spring Boot Mongo findById返回null

时间:2018-10-09 15:13:23

标签: spring mongodb spring-boot kotlin spring-data-mongodb

我有一个集合,文档中的字段名为_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...

MyDocument是

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

尝试通过其他字段查找文档。

关于我可能会丢失的内容或解决方法的想法?

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您应该这样指定ID的类型

public class Article {

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

    private String title;

    private String desc;
}