spring MongoTemplate 更新複雜物件資料
阿新 • • 發佈:2019-01-01
先說下需求(我把需求簡化了下),看下圖。現在有很多人選了自己要上的課程,資料存mongo裡,但是發現courses中id=2的【數學】,名稱錄入錯誤了,或者說id=2的數學課程,名稱需要更新成“高等數學”。
一開始按照老套路直接去update,會報一個錯。Write failed with error code 16837 and error message 'cannot use the part (......) to traverse the element......
然後網上找了很多方法去嘗試,發現spring的mongoTemplate文件很多比較亂,也不詳細。
最終還是給折騰出來了。
// 用到的package import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; // 主要程式碼 Update update = Update.update("courses.$.name", "高等數學").set("courses.$.code", "GDSX"); Query query = new Query(Criteria.where("sex").is("男").and("courses.id").is(2)); WriteResult wr = mongoTemplate.updateMulti(query, update, Student.class); System.out.println("受影響的行數================>" + wr.getN());
最終列印結果是受影響行數為2。更新了2條資料。更新完的資料如下圖: