MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoTemplate upsert - cara mudah untuk membuat Pembaruan dari pojo (pengguna mana yang telah diedit)?

Saya menemukan solusi yang cukup bagus untuk pertanyaan ini

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

Harap perhatikan bahwa Update.fromDBObject mengembalikan objek pembaruan dengan semua bidang di dbDoc. Jika Anda hanya ingin memperbarui bidang non-null, Anda harus membuat kode metode baru untuk mengecualikan bidang nol.

Misalnya, front-end memposting dokumen seperti di bawah ini:

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

Kami hanya perlu memperbarui bidang 'bahasa':

//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 :Menyortir Data saat menggunakan DBcollection find

  2. Layar-mongo. Temukan dalam susunan

  3. Tidak dapat terhubung ke layanan mongodb di cluster Kubernetes

  4. Bagaimana Menemukan catatan yang cocok di mongodb?

  5. Ekspor data JSON dan muat ke dalam Database Relasional