摘要:本篇博文為的中一篇,前面介紹簡單的查詢使用,這一篇重點則放在插入數據基本使用首先是準備好基本環境,可以參考博文高級篇之基本環境搭建與使用高級篇之查詢基本使用姿勢新增一條數據一個基本數據稱為,和不一樣,沒有強制約束哪些字段,可以隨
本篇博文為mongodb的curd中一篇,前面介紹簡單的查詢使用,這一篇重點則放在插入數據;
I. 基本使用首先是準備好基本環境,可以參考博文
181213-SpringBoot高級篇MongoDB之基本環境搭建與使用
190113-SpringBoot高級篇MongoDB之查詢基本使用姿勢
1. 新增一條數據MongoDB一個基本數據稱為document,和mysql不一樣,沒有強制約束哪些字段,可以隨意的插入,下面是一個簡單的插入演示
private static final String COLLECTION_NAME = "demo"; @Autowired private MongoTemplate mongoTemplate; /** * 新增一條記錄 */ public void insert() { JSONObject object = new JSONObject(); object.put("name", "一灰灰blog"); object.put("desc", "歡迎關注一灰灰Blog"); object.put("age", 28); // 插入一條document mongoTemplate.insert(object, COLLECTION_NAME); JSONObject ans = mongoTemplate .findOne(new Query(Criteria.where("name").is("一灰灰blog").and("age").is(28)), JSONObject.class, COLLECTION_NAME); System.out.println(ans); }
使用的關鍵地方為一行: mongoTemplate.insert(object, COLLECTION_NAME);
第一個參數為待插入的document
第二個參數為collection name (相當于mysql的table)
執行后輸出結果為如下
{"name":"一灰灰blog","_id":{"counter":12472353,"date":1548333180000,"machineIdentifier":14006254,"processIdentifier":17244,"time":1548333180000,"timeSecond":1548333180,"timestamp":1548333180},"age":28,"desc":"歡迎關注一灰灰Blog"}2. 批量插入
一次插入多條記錄,傳集合進去即可
/** * 批量插入 */ public void insertMany() { List
返回結果如下:
Query Insert Records: [{t_id=0, wechart=一灰灰blog, _id=5c49b07cd5b7ee435cbe5022, blog=[http://spring.hhui.top, http://blog.hhui.top], nums=210}, {t_id=1, wechart=一灰灰blog, _id=5c49b07cd5b7ee435cbe5023, blog=[http://spring.hhui.top, http://blog.hhui.top], nums=210}, {t_id=2, wechart=一灰灰blog, _id=5c49b07cd5b7ee435cbe5024, blog=[http://spring.hhui.top, http://blog.hhui.top], nums=210}]3. upsert,不存在才插入
我們希望在插入之前,判斷數據是否存在,如果不存在則插入;如果存在則更新;此時就可以采用upsert來使用,一般三個參數
mongoTemplate.upsert(Query query, Update update, String collectionName)
第一個為查詢條件,第二個為需要更新的字段,最后一個指定對應的collection,一個簡單的實例如下
/** * 數據不存在,通過 upsert 新插入一條數據 * * set 表示修改key對應的value * addToSet 表示在數組中新增一條 */ public void upsertNoMatch() { // addToSet 表示將數據塞入document的一個數組成員中 UpdateResult upResult = mongoTemplate.upsert(new Query(Criteria.where("name").is("一灰灰blog").and("age").is(100)), new Update().set("age", 120).addToSet("add", "額外增加"), COLLECTION_NAME); System.out.println("nomatch upsert return: " + upResult); Listre = mongoTemplate .find(new Query(Criteria.where("name").is("一灰灰blog").and("age").is(120)), JSONObject.class, COLLECTION_NAME); System.out.println("after upsert return should not be null: " + re); System.out.println("------------------------------------------"); }
輸出結果如下:
nomatch upsert return: AcknowledgedUpdateResult{matchedCount=0, modifiedCount=0, upsertedId=BsonObjectId{value=5c49b07ce6652f7e1add1ea2}} after upsert return should not be null: [{"add":["額外增加"],"name":"一灰灰blog","_id":{"counter":14491298,"date":1548333180000,"machineIdentifier":15099183,"processIdentifier":32282,"time":1548333180000,"timeSecond":1548333180,"timestamp":1548333180},"age":120}] ------------------------------------------4. upsert,存在則更新
前面的demo是演示不存在,那么存在數據呢?
/** * 只有一條數據匹配,upsert 即表示更新 */ public void upsertOneMatch() { // 數據存在,使用更新 UpdateResult result = mongoTemplate.upsert(new Query(Criteria.where("name").is("一灰灰blog").and("age").is(120)), new Update().set("age", 100), COLLECTION_NAME); System.out.println("one match upsert return: " + result); Listans = mongoTemplate .find(new Query(Criteria.where("name").is("一灰灰blog").and("age").is(100)), JSONObject.class, COLLECTION_NAME); System.out.println("after update return should be one: " + ans); System.out.println("------------------------------------------"); }
輸出結果如下,注意下面的輸出數據的 _id,正視前面插入的那條數據,兩個數據唯一的不同,就是age被修改了
one match upsert return: AcknowledgedUpdateResult{matchedCount=1, modifiedCount=1, upsertedId=null} after update return should be null: [{"add":["額外增加"],"name":"一灰灰blog","_id":{"counter":14491298,"date":1548333180000,"machineIdentifier":15099183,"processIdentifier":32282,"time":1548333180000,"timeSecond":1548333180,"timestamp":1548333180},"age":100}]5. upsert,多條滿足時
如果query條件命中多條數據,怎么辦?會修改幾條數據呢?
/** * 兩條數據匹配時,upsert 將只會更新一條數據 */ public void upsertTwoMatch() { // 多條數據滿足條件時,只會修改一條數據 System.out.println("------------------------------------------"); Listre = mongoTemplate .find(new Query(Criteria.where("name").is("一灰灰blog").and("age").in(Arrays.asList(28, 100))), JSONObject.class, COLLECTION_NAME); System.out.println("original record: " + re); UpdateResult result = mongoTemplate .upsert(new Query(Criteria.where("name").is("一灰灰blog").and("age").in(Arrays.asList(28, 100))), new Update().set("age", 120), COLLECTION_NAME); System.out.println("two match upsert return: " + result); re = mongoTemplate.find(new Query(Criteria.where("name").is("一灰灰blog").and("age").is(120)), JSONObject.class, COLLECTION_NAME); System.out.println("after upsert return size should be 1: " + re); System.out.println("------------------------------------------"); }
根據實際輸出進行查看,發現只有一條數據被修改;另外一條保持不變,結果如下
------------------------------------------ original record: [{"name":"一灰灰blog","_id":{"counter":12472353,"date":1548333180000,"machineIdentifier":14006254,"processIdentifier":17244,"time":1548333180000,"timeSecond":1548333180,"timestamp":1548333180},"age":28,"desc":"歡迎關注一灰灰Blog"}, {"add":["額外增加"],"name":"一灰灰blog","_id":{"counter":14491298,"date":1548333180000,"machineIdentifier":15099183,"processIdentifier":32282,"time":1548333180000,"timeSecond":1548333180,"timestamp":1548333180},"age":100}] two match upsert return: AcknowledgedUpdateResult{matchedCount=1, modifiedCount=1, upsertedId=null} after upsert return size should be 1: [{"name":"一灰灰blog","_id":{"counter":12472353,"date":1548333180000,"machineIdentifier":14006254,"processIdentifier":17244,"time":1548333180000,"timeSecond":1548333180,"timestamp":1548333180},"age":120,"desc":"歡迎關注一灰灰Blog"}] ------------------------------------------II. 其他 0. 項目
工程:spring-boot-demo
module: mongo-template
相關博文
181213-SpringBoot高級篇MongoDB之基本環境搭建與使用
190113-SpringBoot高級篇MongoDB之查詢基本使用姿勢
1. 一灰灰Blog一灰灰Blog個人博客 https://blog.hhui.top
一灰灰Blog-Spring專題博客 http://spring.hhui.top
一灰灰的個人博客,記錄所有學習和工作中的博文,歡迎大家前去逛逛
2. 聲明盡信書則不如,以上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激
微博地址: 小灰灰Blog
QQ: 一灰灰/3302797840
3. 掃描關注一灰灰blog
知識星球
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/19470.html
摘要:原文高級篇之修改基本使用姿勢本篇依然是中的一篇,主要介紹的更新,主要內容如下常見類型成員的修改數組類型成員的增刪改類型成員的增刪改基本使用首先是準備好基本環境,可以參考博文高級篇之基本環境搭建與使用高級篇之查詢基本使用姿勢在開 原文: 190218-SpringBoot高級篇MongoDB之修改基本使用姿勢 本篇依然是MongoDB curd中的一篇,主要介紹document的更新,...
摘要:學習一個新的數據庫,一般怎么下手呢基本的沒跑了,當可以熟練的增刪改查一個數據庫時,可以說對這個數據庫算是入門了,如果需要更進一步的話,就需要了解下數據庫的特性,比如索引事物鎖分布式支持等本篇博文為的入門篇,將介紹一下基本的查詢操作,在中可以 學習一個新的數據庫,一般怎么下手呢?基本的CURD沒跑了,當可以熟練的增、刪、改、查一個數據庫時,可以說對這個數據庫算是入門了,如果需要更進一步的...
摘要:學習一個新的數據庫,一般怎么下手呢基本的沒跑了,當可以熟練的增刪改查一個數據庫時,可以說對這個數據庫算是入門了,如果需要更進一步的話,就需要了解下數據庫的特性,比如索引事物鎖分布式支持等本篇博文為的入門篇,將介紹一下基本的查詢操作,在中可以 學習一個新的數據庫,一般怎么下手呢?基本的CURD沒跑了,當可以熟練的增、刪、改、查一個數據庫時,可以說對這個數據庫算是入門了,如果需要更進一步的...
閱讀 2698·2021-11-08 13:16
閱讀 2376·2021-10-18 13:30
閱讀 2247·2021-09-27 13:35
閱讀 2002·2019-08-30 15:55
閱讀 2451·2019-08-30 13:22
閱讀 592·2019-08-30 11:24
閱讀 2084·2019-08-29 12:33
閱讀 1820·2019-08-26 12:10