MongoDb Java驱动程序到Json()和$oid



我正在构建一个使用MongoDb和MongoDb驱动程序的Java Jersey API。

资源应该输出存储的MongoDb文档的JSON,以便在使用Svelte的前端项目中使用。

由于标准的org.bson.Document.toJson()实现,我的文档的输出在某种程度上看起来像:

[{ "_id" : { "$oid" : "5e97f08f2175aa9174dbec0e" }, "hour" : 8, "minute" : 15, "enabled" : true, "duration" : 120 }

我宁愿它是:

[{ "_id" : "5e97f08f2175aa9174dbec0e", "hour" : 8, "minute" : 15, "enabled" : true, "duration" : 120 }

这样就更容易在前端处理id。那么如何摆脱$oid对象呢?

我已经设法通过使用获得了我想要的格式

JsonWriterSettings settings = JsonWriterSettings.builder()
.outputMode(JsonMode.RELAXED)
.objectIdConverter((value, writer) -> writer.writeString(value.toHexString()))
.build();
System.out.println(doc.toJson(settings));

但是如何全局注册这个设置对象,以便每个doc.toJson()调用都使用它呢?

如果我将修改过的或新的文档从前端发送到API并执行以下操作,会发生什么:

Document document = Document.parse(doc);

我修改后的_id字段是否再次自动转换为ObjectId?还是我需要org.bson.codecs.Decoder或CodecRegistry?如何做到这一点?

$oid指的是bson规范中的ObjectId字段类型。据我所知,您需要操作文档,将_id的ObjectId替换为String。

String oidAsString = document.getObjectId("_id").toString();
document.put("_id", oidAsString);

相关内容

  • 没有找到相关文章

最新更新