mongodb-java POJO не возвращает идентификатор

#java #mongodb #dropwizard #mongodb-java

#java #mongodb #волшебник падения #mongodb-java

Вопрос:

Я новичок в MongoDB и здесь немного схожу с ума. Я использую последнюю версию mongo-java-driver и dropwizard.

Я использую POJO для записи в DDBB, который работает. Однако, пытаясь получить элемент, я не получаю фактический _id. Вот что я попробовал:

Документ DDBB

 {
   _id:603c249cbb33487d9baa49f8,
   name:"John"
}
 

Класс Персоны

 public class Person {

    @BsonProperty("_id")
    @BsonId
    private ObjectId id;

    @NotNull
    @JsonProperty
    private String name;

}

 

ВОЗВРАТ:

 {
    "id": {
        "timestamp": 1614554268,
        "counter": 11160056,
        "machineIdentifier": 12268360,
        "processIdentifier": 32155,
        "timeSecond": 1614554268,
        "time": 1614554268000,
        "date": 1614554268000
    },
    "name": "John"
}
 

Как вы можете видеть, он не возвращает фактическое _id значение (например, 603c249cbb33487d9baa49f8). Я пытался сделать идентификатор строкой, но я получаю сообщение об ошибке Failed to decode 'Person'. Decoding '_id' errored with: readString can only be called when CurrentBSONType is STRING, not when CurrentBSONType is OBJECT_ID.

Я следовал нескольким руководствам и искал вопросы здесь, но, похоже, ничего не работает.

Любая помощь будет очень признательна!

Ответ №1:

Вам не нужно использовать @BsonId , вы можете просто использовать @Id и data-type поле идентификатора должно быть String . В этом случае вы получите 12bit идентификатор, сгенерированный mongo.

 public class Person {

    @Id
    private String id;

    @NotNull
    @JsonProperty
    private String name;

}
 

Ответ №2:

Вы можете просто использовать @MongoId вместо @BsonId

 public class Person {

    @MongoId
    private String id;

    @NotNull
    @JsonProperty
    private String name;

}