mongoTemplate小坑
in 后端 with 0 comment

mongoTemplate小坑

in 后端 with 0 comment

背景

java中有两个类,其中一个类当作内嵌文档。两个类中均包含id属性,按照常规插入,但取出的时候内嵌文档的id为null。
(图1.数据库中)
7777.png
(图2.mongoTemplate查询返回结果)
8888.png

原因

mongoTemplate存储时默认会把java类中的id属性转换为_id字段,取出来同样会进行这种映射。

但在存储时内嵌文档的id属性不会转换为_id,但取出来的时候进行了映射,就导致了能存不能取的情况。

为了验证,在数据库将上面那条数据的id改为_id进行测试,是能正确查询出来的。
555.png
6666.png

解决方案

用JSONObject取,再转换成实体类

        Aggregation aggregation = Aggregation.newAggregation(operations);
        AggregationResults<JSONObject> results = mongoTemplate.aggregate(aggregation, tableName, JSONObject.class);
        List<JSONObject> mappedResults = results.getMappedResults();
        List<RecommendAuthor> recommendAuthorList = new ArrayList<>();
        for (JSONObject j : mappedResults){
            recommendAuthorList.add(JSONObject.toJavaObject(j,RecommendAuthor.class));
        }
Responses