sql >> データベース >  >> NoSQL >> MongoDB

SpringDataMongoDB-空のオブジェクトを無視する

    ここでできることの1つは、MainDoc用のカスタムコンバーターを作成することです。 :

    public class MainDocConverter implements Converter<MainDoc, DBObject> {
        @Override
        public DBObject convert(final MainDoc source) {
            final BasicDbObject dbObject = new BasicDBObject();
            ...
            if(/* validate is subdoc is not null and not empty */) {
                dbOject.put("subDoc", source.getSubDoc());
            }
        }
    }
    

    @Configurationに登録できます 例:

    @Configuration
    @EnableMongoRepositories(basePackages = {"package"})
    public class MongoConfig {
    
        private final MongoDbFactory mongoDbFactory;
    
        public MongoConfig(final MongoDbFactory mongoDbFactory) {
            this.mongoDbFactory = mongoDbFactory;
        }
    
        @Bean
        public MongoTemplate mongoTemplate() throws Exception {
    
            final MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory, getDefaultMongoConverter());
            return mongoTemplate;
    
        }
    
        @Bean
        public MappingMongoConverter getDefaultMongoConverter() throws Exception {
    
            final MappingMongoConverter converter = new MappingMongoConverter(
                    new DefaultDbRefResolver(mongoDbFactory), new MongoMappingContext());
            converter.setCustomConversions(new CustomConversions(Arrays.asList(new MainDocConverter())));
    
            return converter;
        }
    
    }
    

    オブジェクトのカスタムコンバーターを作成したくない場合は、おもちゃにデフォルトのコンバーターを使用して、少し変更することができます。

    final Document document = (Document) getDefaultMongoConverter().convertToMongoType(mainDoc);
    
    if(/* validate is null or is empty */) {
        document .remove("subDoc");
    }
    
    mongoTemplate().save(document);
    

    実際、それは最善の方法ではありません。みんなが書いたように、空のオブジェクトは{}として保存する必要があります 、しかしコンバーターはあなたのケースであなたを助けることができます。




    1. LogicException:PHPRedis拡張機能がインストールされ有効になっていることを確認してください

    2. 最近保存されたキーがLaravel経由で表示されないRedisCLI

    3. Mongoクエリの質問$gt、$ lt

    4. MongoDB RubyDriver2.5.xレプリカセットのホスト名で大文字と小文字を区別する問題