Spring Boot Mongo findById возвращает ноль - PullRequest
0 голосов
/ 09 октября 2018

У меня есть коллекция с документами, имеющими поле с именем _id типа String, не сгенерированное вручную.

Я пытался получить документ, используя его идентификатор.

    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)

Попытка найти документ с помощью другого поля работает.

Идея о том, что я мог упустить или обойти?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Ypu может определить в вашем хранилище:

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

и использовать его:

myDocumentRepository.findBy_id("a2z3e44R");

для получения дополнительной информации см.

или

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

нравится этот другой ответ ссылка

0 голосов
/ 09 октября 2018

Попробуйте пометить _id с аннотацией @Id.Аннотация @Id используется для указания идентификатора Spring.

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