mongoDB игнорирует уникальный индекс

Я создал службу REST и обнаружил, что строка JSON, сгенерированная из ObjectId с помощью Gson, будет в формате, отличном от того, который создается с помощью spring -boot. и если я отправлю ObjectId существующего поля _id документа в формате GSON в мою службу REST и сохраню его в коллекции с помощью функции сохранения mongorepository, новый документ с дублированным _id все равно будет вставлен, даже если для такого поле. Но если я отправлю ObjectId в формате, созданном с помощью весенней загрузки, все будет работать отлично. Интересно, что вызвало такую ​​проблему?

        "timestamp": 1558461711,
        "machineIdentifier": 5077764,
        "processIdentifier": 21816,
        "counter": 13546695,
        "date": "2019-05-21T18:01:51.000+0000",
        "time": 1558461711000,
        "timeSecond": 1558461711(generated by spring-boot)


        "counter": 13546695,
        "randomValue1": 9256029,
        "randomValue2": 856,
        "timestamp": 1558461711(by GSON)

person tony edward    schedule 22.05.2019    source источник


Ответы (1)


Если вы работаете с mongodb, лучше использовать org.bson.Document (который предоставляется зависимостью mongodb) или какой-либо другой класс mongodb для преобразования документа в json, а не GSON.

Document document = new Document();
document.put("_id", new ObjectId());
String json = document.toJson()

document.toJson() должен правильно преобразовать ObjectId в строку. Фактически вывод приведенного выше кода будет:

{ "_id" : { "$oid" : "5ce51fb47dda11a8507087eb" } }

Это допустимый формат для mongodb, не знаю, как SpringBoot отреагирует на него.
В любом случае, надеюсь, это поможет.

person mishak471    schedule 22.05.2019
comment
Хм ... не знаю, почему, но кажется, что SpringBoot не может получить правильный ObjectId из этого строкового значения. - person tony edward; 23.05.2019