MongoDb Java驱动程序toJson()和$ oid

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

资源应使用Svelte输出要在前端项目中使用的已存储MongoDb文档的JSON。

由于采用了标准的org.bson.Document.toJson()实现,我的文档输出看起来像这样:

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

我希望它是:

[{ "_id" : "5e97f08f2175aa9174dbec0e","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?怎么办?

maoyink 回答:MongoDb Java驱动程序toJson()和$ oid

$ oid引用bson spec中的ObjectId字段类型。据我所知,您需要操纵文档以将_id的ObjectId替换为String。

String oidAsString = document.getObjectId("_id").toString();
document.put("_id",oidAsString);
本文链接:https://www.f2er.com/2422775.html

大家都在问