MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoTemplate upsert – лесен начин да направите актуализация от pojo (който потребител е редактирал)?

Намерих доста добро решение за този въпрос

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

Моля, обърнете внимание, че Update.fromDBObject връща актуализиран обект с всички полета в dbDoc. Ако просто искате да актуализирате ненулеви полета, трябва да кодирате нов метод за изключване на ненулеви полета.

Например, предният край публикува документ като по-долу:

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

Трябва само да актуализираме полето „език“:

//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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB - Грешка:документът трябва да има _id преди запазване

  2. Изпратете заявка към масив MongoDB и сортирайте с най-съвпадащите елементи

  3. mongoDB префикс заместващ знак:пълнотекстово търсене ($text) намиране на част с низ за търсене

  4. Spring Data MongoDB:рамка за агрегиране - сортиране с вложено свойство хвърля невалидна препратка

  5. Как да импортирате данни в mongoDB