techiall / Blog

🍋 [My Blog] See discussions
https://github.com/techiall/Blog/discussions
MIT License
8 stars 1 forks source link

Spring Data Mongo 不保存 _class 字段 #57

Open techiall opened 5 years ago

techiall commented 5 years ago

由于项目之前是使用 Nodejs 写的,数据存放在 Mongodb 中,为了保证切换到 Spring Boot 这边,数据保持一致性。而 Spring Data Mongo 在保存数据的过程中会加入 _class 字段。数据库中虽然没有这个字段还是可以正常读取的,但写入或者更新的时候,就默认给你添加这个字段。

去掉 Mongodb 写入时自动写入类名,写一个配置类即可。直接复制粘贴到项目中即可。已经过测试。


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.convert.DbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;

/**
 * https://stackoverflow.com/questions/23517977/spring-boot-mongodb-how-to-remove-the-class-column
 */
@Configuration
public class MongoClassConverter {
    private final MongoDbFactory mongoDbFactory;
    private final MongoMappingContext mongoMappingContext;

    public MongoClassConverter(MongoDbFactory mongoDbFactory, MongoMappingContext mongoMappingContext) {
        this.mongoDbFactory = mongoDbFactory;
        this.mongoMappingContext = mongoMappingContext;
    }

    @Bean
    public MappingMongoConverter mappingMongoConverter() {
        DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory);
        MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
        converter.setTypeMapper(new DefaultMongoTypeMapper(null));
        return converter;
    }

}

参考链接