mongodb - How to update document in mongo to get performance? -
i new spring data mongo. i've scenario want create study if not present in mongo db. if present, i've update new values.
i tried in following way, works fine in case, i'm not sure correct/best/advisable way update etc far performance concerned.
could please guide on this?
public void savestudy(list<study> studies) { (study study : studies) { string id = study.getid(); study presentindbstudy = studyrepository.findone(id); //find document, modify , update save() method. if(presentindbstudy != null) { presentindbstudy.settitle(task.gettitle()); presentindbstudy.setdescription(study.getdescription()); presentindbstudy.setstart(study.getstart()); presentindbstudy.setend(study.getend()); repository.save(presentindbstudy); } else repository.save(study); } }
you have use mongotemplate.upsert() achieve this. need add 2 more classes: studyrepositorycustom interface , class extends interface, studyrepositoryimpl
interface studyrepositorycustom { public writeresult updatestudy(study study); } update current studyrepository extend interface
@repository public interface studyrepository extends mongorepository<study, string>, studyrepositorycustom { // ... code before } and add class implements studyrepositorycustom. @autowire our mongotemplate , provide implementation updating study or saving if not exist. use mongotemplate.upsert() method.
class studyrepositoryimpl implements studyrepositorycustom { @autowired mongotemplate mongotemplate; public writeresult updatestudy(study study) { query searchquery = new query(criteria.where("id").is(study.getid()); writeresult update = mongotemplate.upsert(searchquery, update.update("title", study.gettitle).set("description", study.getdescription()).set(...)), study.class); return update; } } kindly note studyrepositoryimpl automatically picked spring data infrastructure we've followed naming convention of extending core repository interface's name impl
check this example on github, @autowire-ing mongotemplate , using custom repository above.
i have not tested code guide :-)
Comments
Post a Comment