sql >> Database >  >> NoSQL >> MongoDB

Spring Data MongoDB - negeer lege objecten

Een ding dat u hier kunt doen, is uw aangepaste converter voor MainDoc . schrijven :

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());
        }
    }
}

U kunt het registreren in @Configuration bestand bijvoorbeeld:

@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;
    }

}

Als je geen aangepaste converter voor je object wilt schrijven, kun je de standaard gebruiken en deze een beetje aanpassen.

final Document document = (Document) getDefaultMongoConverter().convertToMongoType(mainDoc);

if(/* validate is null or is empty */) {
    document .remove("subDoc");
}

mongoTemplate().save(document);

Eigenlijk is het niet de beste manier. Zoals jongens schreven, moet een leeg object worden opgeslagen als {} , maar converter kan u helpen met uw zaak.




  1. Hoe krijg ik mongo shell-uitvoer (drie stippen) voor een niet-beëindigde opdracht?

  2. Overeenkomen met meerdere criteria binnen een array

  3. Spring MongoItemReader leest niet alle records bij enkele uitvoering

  4. Kan iemand het redis setbit-commando uitleggen?