java解决mongodb导入数据,丢失字段类型的问题

文章讨论了在使用MongoDB进行数据操作时,如何避免在JSON到BSON转换过程中丢失字段类型和日期格式的问题。通过测试示例展示了如何使用MongoConverter和TypeInformation来确保数据类型的完整性和时间戳的正确导入。同时,文章提到了实体类的结构,包括Person、Man、Women及HumanInfo,强调了继承在数据模型中的应用。
摘要由CSDN通过智能技术生成
//测试实例
String json = "{\"_id\": \"1234567\", \"name\": \"人类资料库\", \"personList\": [{\"wight\": 160, \"name\": \"一个男人\", \"age\": 18, \"birthday\": {\"$date\": \"2023-02-01T03:16:44.861Z\"}, \"_class\": \"com.allinmd.cn.case_history.admin.test.utils.MongoTest$Man\"}, {\"height\": 170, \"name\": \"一个女人\", \"age\": 16, \"birthday\": {\"$date\": \"2023-01-31T03:16:44.861Z\"}, \"_class\": \"com.allinmd.cn.case_history.admin.test.utils.MongoTest$Women\"}], \"_class\": \"com.allinmd.cn.case_history.admin.test.utils.MongoTest$HumanInfo\"}";


    @Test
    public void test11(){
        
        Document parse = Document.parse(json);
        MongoConverter converter = mongoTemplate.getConverter();
        TypeInformation<?> typeInformation = converter.getTypeMapper().readType(parse);
        if (typeInformation != null) {
            Class<?> type = typeInformation.getType();
            Object read = converter.read(type, parse);
            System.out.println(read);
        }
    }

背景:

1、如果在工具中直接执行insert语句,会导致字段类型丢失,以及一些时间日期格式的不能正确导入;

2、如果不经过JSON->BSON->Object,直接JSON->Object,则会导致数据内的类型(_class)丢失;

实体的结构:

@Data
    static class Person{
        private String name;

        private Integer age;

        private Date birthday;
    }
    @Data
    @EqualsAndHashCode(callSuper = false)
    static class Man extends Person{
        private Integer wight;
    }

    @Data
    @EqualsAndHashCode(callSuper = false)
    static class Women extends Person{
        private Integer height;
    }

    @Data
    static class HumanInfo{

        @MongoId
        private String id;
        /**
         *
         */
        private String name;

        private List<Person> personList;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值