国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

SpringBoot高級篇MongoDB之如何新增文檔

sherlock221 / 2092人閱讀

摘要:本篇博文為的中一篇,前面介紹簡單的查詢使用,這一篇重點(diǎn)則放在插入數(shù)據(jù)基本使用首先是準(zhǔn)備好基本環(huán)境,可以參考博文高級篇之基本環(huán)境搭建與使用高級篇之查詢基本使用姿勢新增一條數(shù)據(jù)一個基本數(shù)據(jù)稱為,和不一樣,沒有強(qiáng)制約束哪些字段,可以隨

本篇博文為mongodb的curd中一篇,前面介紹簡單的查詢使用,這一篇重點(diǎn)則放在插入數(shù)據(jù);

I. 基本使用

首先是準(zhǔn)備好基本環(huán)境,可以參考博文

181213-SpringBoot高級篇MongoDB之基本環(huán)境搭建與使用

190113-SpringBoot高級篇MongoDB之查詢基本使用姿勢

1. 新增一條數(shù)據(jù)

MongoDB一個基本數(shù)據(jù)稱為document,和mysql不一樣,沒有強(qiáng)制約束哪些字段,可以隨意的插入,下面是一個簡單的插入演示

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", "歡迎關(guān)注一灰灰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);
}

使用的關(guān)鍵地方為一行: mongoTemplate.insert(object, COLLECTION_NAME);

第一個參數(shù)為待插入的document

第二個參數(shù)為collection name (相當(dāng)于mysql的table)

執(zhí)行后輸出結(jié)果為如下

{"name":"一灰灰blog","_id":{"counter":12472353,"date":1548333180000,"machineIdentifier":14006254,"processIdentifier":17244,"time":1548333180000,"timeSecond":1548333180,"timestamp":1548333180},"age":28,"desc":"歡迎關(guān)注一灰灰Blog"}
2. 批量插入

一次插入多條記錄,傳集合進(jìn)去即可

/**
 * 批量插入
 */
public void insertMany() {
    List> records = new ArrayList<>();
    for (int i = 0; i < 3; i++) {
        Map record = new HashMap<>(4);
        record.put("wechart", "一灰灰blog");
        record.put("blog", Arrays.asList("http://spring.hhui.top", "http://blog.hhui.top"));
        record.put("nums", 210);
        record.put("t_id", i);
        records.add(record);
    }

    // 批量插入文檔
    mongoTemplate.insert(records, COLLECTION_NAME);

    // 查詢插入的內(nèi)容
    List result =
            mongoTemplate.find(new Query(Criteria.where("wechart").is("一灰灰blog")), Map.class, COLLECTION_NAME);
    System.out.println("Query Insert Records: " + result);
}

返回結(jié)果如下:

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,不存在才插入

我們希望在插入之前,判斷數(shù)據(jù)是否存在,如果不存在則插入;如果存在則更新;此時就可以采用upsert來使用,一般三個參數(shù)

mongoTemplate.upsert(Query query, Update update, String collectionName)

第一個為查詢條件,第二個為需要更新的字段,最后一個指定對應(yīng)的collection,一個簡單的實(shí)例如下

/**
 * 數(shù)據(jù)不存在,通過 upsert 新插入一條數(shù)據(jù)
 *
 * set 表示修改key對應(yīng)的value
 * addToSet 表示在數(shù)組中新增一條
 */
public void upsertNoMatch() {
    // addToSet 表示將數(shù)據(jù)塞入document的一個數(shù)組成員中
    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);

    List re = 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("------------------------------------------");
}

輸出結(jié)果如下:

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是演示不存在,那么存在數(shù)據(jù)呢?

/**
 * 只有一條數(shù)據(jù)匹配,upsert 即表示更新
 */
public void upsertOneMatch() {
    // 數(shù)據(jù)存在,使用更新
    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);

    List ans = 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("------------------------------------------");
}

輸出結(jié)果如下,注意下面的輸出數(shù)據(jù)的 _id,正視前面插入的那條數(shù)據(jù),兩個數(shù)據(jù)唯一的不同,就是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條件命中多條數(shù)據(jù),怎么辦?會修改幾條數(shù)據(jù)呢?

/**
 * 兩條數(shù)據(jù)匹配時,upsert 將只會更新一條數(shù)據(jù)
 */
public void upsertTwoMatch() {
    // 多條數(shù)據(jù)滿足條件時,只會修改一條數(shù)據(jù)
    System.out.println("------------------------------------------");
    List re = 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("------------------------------------------");
}

根據(jù)實(shí)際輸出進(jìn)行查看,發(fā)現(xiàn)只有一條數(shù)據(jù)被修改;另外一條保持不變,結(jié)果如下

------------------------------------------
original record: [{"name":"一灰灰blog","_id":{"counter":12472353,"date":1548333180000,"machineIdentifier":14006254,"processIdentifier":17244,"time":1548333180000,"timeSecond":1548333180,"timestamp":1548333180},"age":28,"desc":"歡迎關(guān)注一灰灰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":"歡迎關(guān)注一灰灰Blog"}]
------------------------------------------
II. 其他 0. 項(xiàng)目

工程:spring-boot-demo

module: mongo-template

相關(guān)博文

181213-SpringBoot高級篇MongoDB之基本環(huán)境搭建與使用

190113-SpringBoot高級篇MongoDB之查詢基本使用姿勢

1. 一灰灰Blog

一灰灰Blog個人博客 https://blog.hhui.top

一灰灰Blog-Spring專題博客 http://spring.hhui.top

一灰灰的個人博客,記錄所有學(xué)習(xí)和工作中的博文,歡迎大家前去逛逛

2. 聲明

盡信書則不如,以上內(nèi)容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發(fā)現(xiàn)bug或者有更好的建議,歡迎批評指正,不吝感激

微博地址: 小灰灰Blog

QQ: 一灰灰/3302797840

3. 掃描關(guān)注

一灰灰blog

知識星球

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/19470.html

相關(guān)文章

  • SpringBoot高級MongoDB修改基本使用姿勢

    摘要:原文高級篇之修改基本使用姿勢本篇依然是中的一篇,主要介紹的更新,主要內(nèi)容如下常見類型成員的修改數(shù)組類型成員的增刪改類型成員的增刪改基本使用首先是準(zhǔn)備好基本環(huán)境,可以參考博文高級篇之基本環(huán)境搭建與使用高級篇之查詢基本使用姿勢在開 原文: 190218-SpringBoot高級篇MongoDB之修改基本使用姿勢 本篇依然是MongoDB curd中的一篇,主要介紹document的更新,...

    lauren_liuling 評論0 收藏0
  • SpringBootMongoTemplate的查詢可以怎么耍

    摘要:學(xué)習(xí)一個新的數(shù)據(jù)庫,一般怎么下手呢基本的沒跑了,當(dāng)可以熟練的增刪改查一個數(shù)據(jù)庫時,可以說對這個數(shù)據(jù)庫算是入門了,如果需要更進(jìn)一步的話,就需要了解下數(shù)據(jù)庫的特性,比如索引事物鎖分布式支持等本篇博文為的入門篇,將介紹一下基本的查詢操作,在中可以 學(xué)習(xí)一個新的數(shù)據(jù)庫,一般怎么下手呢?基本的CURD沒跑了,當(dāng)可以熟練的增、刪、改、查一個數(shù)據(jù)庫時,可以說對這個數(shù)據(jù)庫算是入門了,如果需要更進(jìn)一步的...

    OnlyLing 評論0 收藏0
  • SpringBootMongoTemplate的查詢可以怎么耍

    摘要:學(xué)習(xí)一個新的數(shù)據(jù)庫,一般怎么下手呢基本的沒跑了,當(dāng)可以熟練的增刪改查一個數(shù)據(jù)庫時,可以說對這個數(shù)據(jù)庫算是入門了,如果需要更進(jìn)一步的話,就需要了解下數(shù)據(jù)庫的特性,比如索引事物鎖分布式支持等本篇博文為的入門篇,將介紹一下基本的查詢操作,在中可以 學(xué)習(xí)一個新的數(shù)據(jù)庫,一般怎么下手呢?基本的CURD沒跑了,當(dāng)可以熟練的增、刪、改、查一個數(shù)據(jù)庫時,可以說對這個數(shù)據(jù)庫算是入門了,如果需要更進(jìn)一步的...

    Ethan815 評論0 收藏0
  • Java后端

    摘要:,面向切面編程,中最主要的是用于事務(wù)方面的使用。目標(biāo)達(dá)成后還會有去構(gòu)建微服務(wù),希望大家多多支持。原文地址手把手教程優(yōu)雅的應(yīng)用四手把手實(shí)現(xiàn)后端搭建第四期 SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Spring 兩大核心之 AOP 學(xué)習(xí) | 掘金技術(shù)征文 原本地址:SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Sp...

    joyvw 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<