एक चीज जो आप यहां कर सकते हैं वह है 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);
वास्तव में यह सबसे अच्छा तरीका नहीं है। जैसा कि लोगों ने लिखा है खाली वस्तु को {}
. के रूप में संग्रहित किया जाना चाहिए , लेकिन कनवर्टर आपके मामले में आपकी मदद कर सकता है।