mongoDB忽略唯一索引

时间:2019-05-22 03:46:19

标签: mongodb spring-boot mongorepository

我构建了一个REST服务,我发现使用Gson从ObjectId生成的JSON字符串的格式将不同于spring-boot生成的格式。并且如果我以GSON格式将现有Document的_id字段的ObjectId发送到我的REST服务并使用mongorepository的save函数将其保存到集合中,即使在_id上设置了唯一索引,仍将插入具有重复_id的新Document领域。但是,如果我以Spring-boot产生的格式发送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)

1 个答案:

答案 0 :(得分:0)

如果您正在使用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将如何对此做出反应。
无论如何,希望对您有所帮助。