Tôi đã tìm thấy một giải pháp khá tốt cho câu hỏi này
//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");
Xin lưu ý rằng Update.fromDBObject trả về một đối tượng cập nhật với tất cả các trường trong dbDoc. Nếu bạn chỉ muốn cập nhật các trường không rỗng, bạn nên viết mã một phương pháp mới để loại trừ các trường rỗng.
Ví dụ:front-end đăng một tài liệu như dưới đây:
//make a new description here
Description d = new Description();
d.setCode("no");
d.setEnglish("norwegian");
Chúng tôi chỉ cần cập nhật trường 'ngôn ngữ':
//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);