Spring Boot и Mon go - findById работает только с ObjectID, но не с идентификатором строки - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть служба Spring Boot GraphQL, которая читает из Mon go.

Я заметил, что если мой идентификатор документа MongoDB имеет ObjectID например "_id": ObjectID("5e5605150"), я могу получить результаты от делает myRepository.findById(myId).

Однако, если этот идентификатор является просто строкой, подобной "_id": "5e5605150", то findById ничего не возвращает.

Хранилище выглядит так:

@Repository
interface MyRepository : MongoRepository<Song, String>

И эта песня выглядит так:

@Document(collection = Song.COLLECTION)
data class Song(
    @Id
    val id: String,

    val title: String
) {
    companion object {
        const val COLLECTION: String = "song"
    }
}

Есть идеи?

Спасибо.

1 Ответ

1 голос
/ 26 февраля 2020

См. Ссылку Spring Data MongoDB на отображение - поле _id обрабатывается специально. Если это тип String или BigInteger, он будет автоматически преобразован в ObjectId. MongoDB поддерживает простые строки для специального поля _id, поэтому, если вы вставляете документы, которые не go через Spring Data (или вставляете документы в виде необработанной строки JSON для вставки драйвера MongoDB), тогда MongoDB не будет автоматически преобразовывать строки в ObjectId - он будет хранить их как строки.

Таким образом, если вы вставите документ {"_id": "5e5605150"} в вашу БД, преобразователь Spring Data MongoDB не сможет найти это, потому что он будет искать только ObjectId.

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