MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Upsert MongoTemplate - maneira fácil de fazer atualização do pojo (qual usuário editou)?


Eu encontrei uma solução muito boa para esta pergunta
//make a new description here
Description d = new Description();
d.setCode("no");
d.setName("norwegian");
d.setNorwegian("norwegian");
d.setEnglish("english");

//build query
Query query = new Query(Criteria.where("code").is(description.getCode()));

//build update
DBObject dbDoc = new BasicDBObject();
mongoTemplate.getConverter().write(d, dbDoc); //it is the one spring use for convertions.
Update update = Update.fromDBObject(dbDoc);

//run it!
mongoTemplate.upsert(query, update, "descriptions");

Por favor, note que Update.fromDBObject retorna um objeto de atualização com todos os campos em dbDoc. Se você deseja apenas atualizar campos não nulos, deve codificar um novo método para excluir campos nulos.

Por exemplo, o front-end poste um documento como abaixo:
//make a new description here
Description d = new Description();
d.setCode("no");
d.setEnglish("norwegian");

Só precisamos atualizar o campo 'language':
//return Update object
public static Update fromDBObjectExcludeNullFields(DBObject object) {
    Update update = new Update();       
    for (String key : object.keySet()) {
        Object value = object.get(key);
        if(value!=null){
            update.set(key, value);
        }
    }
    return update;
}

//build udpate
Update update = fromDBObjectExcludeNullFields(dbDoc);