mongodbTemplate怎么優雅的實現修改操作


大家在開發功能模塊的時候,有沒有發現遇到需要把數據存到mongodb數據庫里,其實在做增加、刪除、查詢都比較順利,但在做修改的時候會發現比較麻煩。如果需要修改的對象屬性很多,但后端不知道前端會傳遞過來幾個字段,在代碼里面按照對象屬性來判斷,代碼會很長很長。這時候我就想有沒有辦法通過循環獲取對象的屬性值來簡化這個操作,查找了mongodb源碼后發現還真有辦法實現這個效果。這里就不賣關子了,直接上代碼:

Document document = Document.parse(JSON.toJSONString(content));
document.remove("contentId");
document.remove("createTime");
Update update = new Update();
for (Map.Entry<String, Object> entry : document.entrySet()) {
  update.set(entry.getKey(), entry.getValue());
}
不知道大家有沒有發現,這樣更新字段,其實你不需要知道需要修改哪幾個字段,就可以實現使用最少的代碼實現想要實現的效果。
但是大家需要注意的是,如果某個字段有默認值,但是實際業務並不會修改它,這時候就需要手動移除調該屬性,是不是覺得很麻煩。所以只能繼續優化這段代碼。
如果我不想在代碼里這樣寫,請問有辦法嗎?如果想要實現這個功能實際上也是可以的,我們需要在content實體類
的contentId和createTime兩個屬性上添加@JsonField(serialize = false)。下面給大家解釋下這個注解的作用。這個注解是fastjson提供的,主要是告訴實體對象生成json對象時,可以
忽視這兩個字段。所以代碼進一步優化后的效果如下

然后上面第一段代碼調整為:

Document document = Document.parse(JSON.toJSONString(content));
Update update = new Update();
for (Map.Entry<String, Object> entry : document.entrySet()) {
  update.set(entry.getKey(), entry.getValue());
}

如果大家在看到這個的時候,有更好的優化方案歡迎留言

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM