我构建了一个REST服务,发现使用Gson从ObjectId生成的JSON字符串的格式与Spring-Boot生成的格式不同。如果我以GSON格式将现有文档的_id字段的ObjectId发送到REST服务,并使用MongoRepository的save函数将其保存到集合中,即使在这样的字段上设置了唯一的索引,仍会插入具有duplicated_id的新文档。但是,如果我以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)
如果您正在使用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会对它做出什么反应。
无论如何,希望它会有所帮助。
在MongoDB3.2中有可能避免这种情况吗?
问题内容: 我有一个MySQL表来保存标签(即像在Stack Overflow上使用的那些标签)。它仅具有一个id(pk)和一个标签列来保存标签本身。 我的Tag实体的带注释的get方法如下所示。 我在标签上使用了唯一的列约束,因为给定标签的行不应超过一行。但是,Hibernate似乎忽略了这一点,即我可以多次保存完全相同的标签,并且它只是创建一个新行而不是抛出异常。 我是否缺少某些东西,还是应该
问题内容: 我正在尝试在表中的两个字段上创建唯一约束。但是,很可能一个人将为空。我只要求如果它们都不为null(永远不会为null),则它们必须是唯一的。 忽略表和字段名称的语义以及这是否有意义-我刚刚做了一些补充。 有没有一种方法可以在这些字段上创建唯一约束,从而对两个非null值强制执行唯一性,但是如果有多个条目(非null和null),则可以忽略呢? 这个问题是针对SQL Server的,我
在MongoDB 2.6.5上使用mongo shell运行查询 问题是:。limit()似乎忽略了。排序()。 这是正常的行为吗?我不认为应该这样做,但我不确定。如果没有,有没有办法让它通过排序然后限制而不是限制然后排序来工作。 我正在运行以下查询 db。邮递查找({categories:{$in:[“101”]},位置:{$near:[1.310000,103.700000],$maxDist
问题内容: 但是,当我删除WHERE时,查询会停止使用该键(即使我明确地强制使用该键也是如此) 有什么解决方法吗? 我意识到我在第二个示例中选择了整个表,但是为什么mysql突然决定它还是要忽略我的FORCE而不使用键?没有密钥,查询大约需要10分钟。 问题答案: FORCE有点用词不当。这是MySQL文档所说的(重点是我的): 您还可以使用FORCE INDEX,其作用与USE INDEX(in
本文向大家介绍如何仅显示MongoDB中的唯一记录,而忽略重复记录?,包括了如何仅显示MongoDB中的唯一记录,而忽略重复记录?的使用技巧和注意事项,需要的朋友参考一下 要仅显示唯一记录,请在MongoDB中使用distinct()。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是获取唯一记录的查询- 这将产生以下输出-