MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Spring Data MongoDB - ignoruj ​​puste obiekty

Jedną z rzeczy, które możesz tutaj zrobić, jest napisanie własnego konwertera dla 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());
        }
    }
}

Możesz go zarejestrować w @Configuration plik na przykład:

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

}

Jeśli nie chcesz pisać niestandardowego konwertera dla swojej zabawki obiektu, możesz użyć domyślnego i nieco go zmodyfikować.

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

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

mongoTemplate().save(document);

Właściwie to nie jest najlepszy sposób. Jak napisali chłopaki, pusty obiekt powinien być przechowywany jako {} , ale konwerter może Ci pomóc w Twojej sprawie.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Przewodnik po konfigurowaniu systemu równoważenia obciążenia w klastrze z fragmentacją MongoDB

  2. Nie można używać znaków { i } w konsoli mongodb

  3. Jak zwrócić dokumenty, w których dwa pola mają tę samą wartość?

  4. Błąd podczas włączania szyfrowania danych przy użyciu klucza lokalnego MONGODB

  5. Nazwa pola batchSize ignorowana w projekcji pola