初探MongoDB

得閑,尋一數(shù)據(jù)庫(kù)學(xué)習(xí)一番,突遇mongo透且,早有耳聞痴施,今有空鉆研娘摔,耍耍碰煌。

一太雨、比較懶蕊退,所以用 docker 部署 mongoDB

1. 打開docker hub官網(wǎng)找到 mongodb 或者輸入命令 docker search mongodb

2. 下載鏡像:docker pull mongo (或者一步到位验夯,直接執(zhí)行第三步)

3. 運(yùn)行鏡像容器:

docker run -d --name my-mongo  -p 27017:27017 -v $PWD/mongo/data/db:/data/db mongo

4. 容器啟動(dòng)成功后猖吴,可以先用navicat連接測(cè)試一下,然后會(huì)發(fā)現(xiàn)不需要登錄挥转,這是因?yàn)檫€沒(méi)有創(chuàng)建用戶

# 使用docker exec 進(jìn)入容器內(nèi)部海蔽,進(jìn)一步創(chuàng)建用戶 
docker exec -it my-mongo mongo admin
# 創(chuàng)建一個(gè)名為 admin,密碼為 admin 的用戶绑谣。
>  db.createUser({ user:'admin',pwd:'admin',roles:[ { role:'userAdminAnyDatabase', db: 'admin'}]});
# 嘗試使用上面創(chuàng)建的用戶信息進(jìn)行連接党窜。
> db.auth('admin', 'admin')

自此,這個(gè)admin用戶就創(chuàng)建好了(具體請(qǐng)參考菜鳥教程

二借宵、整合spring boot試試幌衣,試試就逝世

  1. 隨便找一個(gè)2.X以上版本的spring boot項(xiàng)目,在pom文件引入依賴
        <!--MongoDB-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
            <version>2.2.6.RELEASE</version>
        </dependency>
  1. 創(chuàng)建一個(gè)POJO壤玫,用來(lái)往mongo里存數(shù)據(jù)豁护,
@Data
// 表示這個(gè)對(duì)象對(duì)應(yīng)的是mongodb庫(kù)里的mongo_test集合(mongo把表稱為集合,其實(shí)都一個(gè)意思)
@Document(collection = "mongo_test")
public class MongoEntity implements Serializable {
    private String name;
    /**
     * @Indexed 設(shè)為索引 到后來(lái)發(fā)現(xiàn)欲间,mongo 3.x以上的版本不推薦這么建索引,所以可以不加這個(gè)注解
     *  unique = true 唯一索引(即:不可重復(fù))
     */
    @Indexed(unique = true)
    private String certCode;
    private Integer age;
    private Date createTime;
    private Date updateTime;
}
  1. 創(chuàng)建完之后發(fā)現(xiàn)楚里,配置文件還沒(méi)配,趕緊回去配猎贴,打開application.yml
  data:
    mongodb:
# 有兩種方式班缎,可以任選其一,不過(guò)我比較推薦第一種她渴,因?yàn)榈诙N容易報(bào)錯(cuò)(我覺(jué)得第二種达址,更適合集群)
# 第一種配置:
      host: 你的host
      port: 27017
      database: test1
      username: admin
      password: admin
      authentication-database: admin
# 第二種配置:(我沒(méi)成功,報(bào)錯(cuò))
#      uri: mongodb://admin:admin@你的host:27017/test1
  1. 像redis一樣,mongo也有自己的Template 惹骂,MongoTemplate
// 首先要注入進(jìn)來(lái)
@Resource
MongoTemplate mongoTemplate;

//比如我要查集合下所有數(shù)據(jù)
List<MongoEntity> allInfo = mongoTemplate.findAll(MongoEntity.class);

//又或者我要新增數(shù)據(jù)
mongoTemplate.insert(mongo);

和redis一樣苏携,Template中的方法命名幾乎都是和其命令是一樣的做瞪。因此熟悉命令后对粪,調(diào)用方法也運(yùn)用自如。
詳情請(qǐng)參考荒天帝886的文章

三装蓬、能一帆風(fēng)順來(lái)到你面前的不是成功著拭,而是一堆堆報(bào)錯(cuò)(避坑指南)

1. 配置文件的配置很少,卻容易失敗牍帚。

如果你用第二種單uri的配置可能出現(xiàn)以下報(bào)錯(cuò):

Command failed with error 18 (AuthenticationFailed): 'Authentication failed.'
MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='admin', source='test1', password=<hidden>, mechanismProperties=<hidden>}

提示我password是空的儡遮,行,那我去找找大神們是怎么配的暗赶,難道我格式不對(duì)鄙币?于是我點(diǎn)開了這篇文章肃叶。
然后證實(shí)了,我的配置是正確的(因?yàn)樵谂渲熬鸵呀?jīng)查閱過(guò)資料了)十嘿。這個(gè)見鬼的問(wèn)題目前我還沒(méi)弄明白(你們誰(shuí)知道因惭,可以留言告訴我),所以為了能快點(diǎn)使用mongo绩衷,經(jīng)過(guò)多方查找蹦魔,我找到了第一種配置方法,結(jié)果成功了咳燕。

2. 加索引的問(wèn)題

起初我是在項(xiàng)目運(yùn)行時(shí)的日志里看到的勿决,他是這么說(shuō)的:

2020-09-10 11:36:15.444  WARN 12924 --- [           main] .m.c.i.MongoPersistentEntityIndexCreator : Automatic index creation will be disabled by default as of Spring Data MongoDB 3.x.
    Please use 'MongoMappingContext#setAutoIndexCreation(boolean)' or override 'MongoConfigurationSupport#autoIndexCreation()' to be explicit.
    However, we recommend setting up indices manually in an application ready block. You may use index derivation there as well.

    > -----------------------------------------------------------------------------------------
    > @EventListener(ApplicationReadyEvent.class)
    > public void initIndicesAfterStartup() {
    >
    >     IndexOperations indexOps = mongoTemplate.indexOps(DomainType.class);
    >
    >     IndexResolver resolver = new MongoPersistentEntityIndexResolver(mongoMappingContext);
    >     resolver.resolveIndexFor(DomainType.class).forEach(indexOps::ensureIndex);
    > }
    > -----------------------------------------------------------------------------------------

大致意思就是,3.x以后的版本招盲,不能自動(dòng)給你建索引了低缩,你最好自己手動(dòng)建一個(gè)∠苄ぃ看完之后表制,我想既然WARN級(jí)別,那應(yīng)該問(wèn)題不大控乾,所以我先看了看庫(kù)里有沒(méi)有加上這個(gè)索引么介,看了之后發(fā)現(xiàn),的確有了:


DDL中可看到

不過(guò)既然提示了蜕衡,那就看看能不能解決一下吧壤短,度娘那找找答案去。
于是我找到了這篇文章
慨仿,借鑒一下他的方法:
也就是說(shuō)我還得寫個(gè)config了久脯,好麻煩,等以后我試試吧镰吆。
總之這是個(gè)官方建議帘撰,如果真的用了注解來(lái)建索引,也不是不可以万皿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末摧找,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子牢硅,更是在濱河造成了極大的恐慌蹬耘,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件减余,死亡現(xiàn)場(chǎng)離奇詭異综苔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門如筛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)堡牡,“玉大人,你說(shuō)我怎么就攤上這事杨刨°睬郑” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵拭嫁,是天一觀的道長(zhǎng)可免。 經(jīng)常有香客問(wèn)我,道長(zhǎng)做粤,這世上最難降的妖魔是什么浇借? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮怕品,結(jié)果婚禮上妇垢,老公的妹妹穿的比我還像新娘。我一直安慰自己肉康,他們只是感情好闯估,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吼和,像睡著了一般涨薪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炫乓,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天刚夺,我揣著相機(jī)與錄音,去河邊找鬼末捣。 笑死侠姑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的箩做。 我是一名探鬼主播莽红,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼邦邦!你這毒婦竟也來(lái)了安吁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤圃酵,失蹤者是張志新(化名)和其女友劉穎柳畔,沒(méi)想到半個(gè)月后馍管,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體郭赐,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捌锭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俘陷。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖观谦,靈堂內(nèi)的尸體忽然破棺而出拉盾,到底是詐尸還是另有隱情,我是刑警寧澤豁状,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布捉偏,位于F島的核電站,受9級(jí)特大地震影響泻红,放射性物質(zhì)發(fā)生泄漏夭禽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一谊路、第九天 我趴在偏房一處隱蔽的房頂上張望讹躯。 院中可真熱鬧,春花似錦缠劝、人聲如沸潮梯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)秉馏。三九已至,卻和暖如春脱羡,著一層夾襖步出監(jiān)牢的瞬間沃饶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工轻黑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糊肤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓氓鄙,卻偏偏與公主長(zhǎng)得像馆揉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抖拦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361