sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoTemplate upsert - enkelt sätt att göra uppdatering från pojo (vilken användare har redigerat)?

Jag hittade en ganska bra lösning på den här frågan

//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");

Observera att Update.fromDBObject returnerar ett uppdateringsobjekt med alla fält i dbDoc. Om du bara vill uppdatera icke-nullfält, bör du koda en ny metod för att utesluta nullfält.

Till exempel, gränssnittet postar ett dokument som nedan:

//make a new description here
Description d = new Description();
d.setCode("no");
d.setEnglish("norwegian");

Vi behöver bara uppdatera fältet 'språk':

//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);


  1. MongoDB sammanlagt returräkning på 0 om inga dokument

  2. Hur kan jag se om det finns fler resultat från en fråga i MongoDB?

  3. Det gick inte att ansluta till server 127.0.0.1:27017

  4. Hur man normaliserar/minskar tidsdata i mongoDB?