mongoDB игнорирует уникальный индекс - PullRequest
0 голосов
/ 22 мая 2019

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

        "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)

1 Ответ

0 голосов
/ 22 мая 2019

Если вы работаете с 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 отреагирует на него.
В любом случае, надеюсь, это поможет.

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