Một điều bạn có thể làm ở đây là viết trình chuyển đổi tùy chỉnh của bạn cho 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());
}
}
}
Bạn có thể đăng ký nó trong @Configuration
tệp ví dụ:
@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;
}
}
Nếu bạn không muốn viết công cụ chuyển đổi tùy chỉnh cho đồ chơi đồ vật của mình, có thể sử dụng công cụ mặc định và sửa đổi một chút.
final Document document = (Document) getDefaultMongoConverter().convertToMongoType(mainDoc);
if(/* validate is null or is empty */) {
document .remove("subDoc");
}
mongoTemplate().save(document);
Thực ra đó không phải là cách tốt nhất. Như mọi người đã viết, đối tượng trống nên được lưu trữ dưới dạng {}
, nhưng công cụ chuyển đổi có thể giúp bạn giải quyết trường hợp của mình.