MongoDB入門

MongoDB與關系型數據庫對比

MongoDB屬于文檔型的非關系型數據庫,其他像Redis就屬于鍵值對型的非關系型數據庫。對于MongodDB來說它是最接近關系型數據庫的。因此,如果有使用Oracle、Mysql的話,會很快上手MongoDB。

  • 集合:在傳統關系型數據庫中以表(table)的方式組織數據,而在MongoDB中取而代之的是集合(collection),也就是說,在MongoDB數據庫中沒有一張張表,而是一個個集合,集合的作用可以理解為表。

  • 文檔:在傳統關系型數據庫的表中有一行行記錄(row),而在MongoDB中取而代之的是文檔(document),MongoDB是用文檔來表示數據的。文檔的格式類似json的格式,例如,{name:"張三",age:20}

下載

從MongoDB的官網 https://www.mongodb.org/ 上下載對應自己系統的版本,我下載的是最新的穩定版3.0.6。我為了講解需要下載的是解壓版,接下來會一步一步配置數據庫。如果覺得麻煩可以通過軟件源的方式安裝,可以參考Install on Linux

安裝配置

  1. 將下載好的壓縮包解壓,發現有一個bin文件夾,里面有許多命令腳本程序,介紹兩個最常用的,下面演示會用到:

    • mongod: 啟動數據庫用的命令
    • mongo: 作為數據庫的客戶端,去連接本地或遠程的數據庫
  2. 創建一個文件夾作為練習MongoDB的目錄,文件夾的名字任意起個就行,比如叫mongodb,文件夾的位置任意。

  3. 將第一步解壓的bin文件夾復制到第二步創建的mongodb文件夾中,接著在mongodb文件夾里面再創建如下三個文件夾:

    • conf: 啟動數據庫的配置文件會存到這個文件夾里
    • db: 數據庫存儲的位置
    • log: 數據庫日志文件會存到這個文件夾里,順便在log文件夾下新建一個mongodb.log的空文件用來記錄日志
  4. 請在conf文件夾下新建mongod.conf文件,作為啟動數據庫的配置文件。MongoDB 2.6 以前的版本配置文件采用鍵值對的方式配置,使用軟件源安裝的話生成的配置文件就是這種格式,從2.6以后MongoDB采用YAML格式進行配置(當然鍵值對的格式也是可以的,MongoDB的后續版本都兼容鍵值對格式。),本教程將采用YAML格式來配置,其實YAML格式也很簡單(具體可以參考MongoDB官方文檔 http://docs.mongodb.org/manual/reference/configuration-options/)。以下是配置文件內容:

     # 配置數據庫綁定的IP和端口號
     net:
       bindIp: 127.0.0.1
       port: 27017
     
     # 配置數據庫日志的位置,且日志以追加的方式記錄
     systemLog:
       destination: file
       path: /Users/xinyiming/Develop/mongodb/log/mongodb.log
       logAppend: true
     
     # 配置數據庫存儲的位置,journal用于故障恢復,在生產環境下必須開啟
     storage:
       dbPath: /Users/xinyiming/Develop/mongodb/db
       journal:
         enabled: true
     
     # fork配置為true,則數據庫以后臺進程的方式啟動,不會阻塞當前命令窗口。注意windows下沒有這個參數
     processManagement:
       fork: true
     
     # 認證配置,默認是無需用戶名密碼的,如果想開啟認證,必須先在數據庫中添加用戶名、密碼及權限
     security:
       authorization: disabled
    

    以上就是最基本的配置了,#開頭的是注釋,縮進不要用tab,用2到3個空格來縮進,在配置項的:后面有個空格,不然啟動時會報錯。

啟動數據庫

完成上述配置后就可以啟動數據庫了,在bin目錄下執行mongod命令

./mongod -f ../conf/mongod.conf

-f指定數據庫啟動時加載的配置文件(實際上如果沒有配置文件,可以直接在mongod后面跟上參數也可以,但不如配置文件方便,可以使用./mongod -h命令查看具體有哪些參數)

這樣一個數據庫實例就啟動成功了,如果有錯誤會顯示在控制臺上,請檢查配置文件是否正確。

連接數據庫

數據庫啟動好之后就可以使用客戶端進行連接了。MongoDB官方自帶了一個客戶端工具,就是上面提到的mongo命令。繼續在bin目錄下執行

./mongo./mongo 127.0.0.1:27017

不帶ip和端口號,默認會連127.0.0.1:27017。默認會連接到test數據庫,連接成功后,顯示如下消息

MongoDB shell version: 3.0.6
connecting to: test
>

并顯示操作數據庫的命令提示符,以后就可以在這里通過命令來操作數據庫了。mongo shell提供了很多方法(可以參考mongo Shell Methods),這里可以輸入help查看可以使用哪些方法。

使用命令操作數據庫

  1. 使用show dbs可以列出當前有哪些數據庫

     > show dbs
     local  0.078GB
    

    目前只顯示出一個local數據庫,這是MongoDB自帶的,雖然我們連的是test數據庫,可test沒有數據因此不顯示出來

  2. 在test數據庫中添加一個user集合,并插入一條數據,結果返回WriteResult對象,包括影響的記錄數

     > db.user.insert({name:"張三",age:14})
     WriteResult({ "nInserted" : 1 })
    

    user集合不需要提前創建,我們再添加一條數據,這次增加一個字段

     > db.user.insert({name:"李四",age:15,address:"北京"})
     WriteResult({ "nInserted" : 1 })
    

    雖然多了個字段,依然能存進去,這說明MongoDB的可擴展性很強。隨著項目的進行,業務變得復雜,剛開始定義的字段不夠用了,需要擴展字段,使用MongoDB的話就無需修改表結構。關于insert方法詳細介紹http://docs.mongodb.org/manual/tutorial/insert-documents/

    再次查詢有哪些數據庫,這時就會顯示出test數據庫了。

     > show dbs
     local  0.078GB
     test   0.078GB
    
  3. 查詢剛才添加的數據

     > db.user.find()
     { "_id" : ObjectId("561923d311f16927acb1ff79"), "name" : "張三", "age" : 14 }
     {"_id" : ObjectId("561a475611f16927acb1ff7a"), "name" : "李四", "age" : 15, "address" : "北京" }
    

    返回的數據中_id是在插入數據時MongoDB自動加入的主鍵,find方法可以傳入過濾條件,如:db.user.find({name:"張三"}),這樣就只返回name是張三的數據了。關于find方法詳細介紹http://docs.mongodb.org/manual/tutorial/query-documents/

  4. 更新一條數據

     > db.user.update({name:"張三"},{$set:{age:20}})
     WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
     > db.user.find()
     { "_id" : ObjectId("561923d311f16927acb1ff79"), "name" : "張三", "age" : 20 }
     { "_id" : ObjectId("561a475611f16927acb1ff7a"), "name" : "李四", "age" : 15, "address" : "北京" }
    

    使用update方法更新張三的年齡為20,update方法接收了兩個參數,第一個參數作用類似于sql中的where條件,第二個參數用于修改具體的字段,$set是MongoDB內置的修改器。MongoDB還提供其他修改器,詳情可以參見https://docs.mongodb.org/manual/reference/operator/update/

    注意,這里的更新操作只會作用匹配到得第一條數據上,只會更新一條數據,如果有兩個張三的話,那么第二條數據就不會更新,如果要更新多條數據,需要在update方法傳入第三個參數{ multi: true },update方法還可以接收其他參數,具體可以參見http://docs.mongodb.org/manual/tutorial/modify-documents/

  5. 刪除數據

     > db.user.remove({name:"張三"})
     WriteResult({ "nRemoved" : 1 })
     > db.user.find()
     { "_id" : ObjectId("561a475611f16927acb1ff7a"), "name" : "李四", "age" : 15, "address" : "北京" }
    

    使用remove方法刪除張三的數據,remove方法接收一個參數,該參數作用類似于sql中where條件,如果要刪除user中所有的數據,則使用db.user.remove({}),如果要刪除user集合,則使用db.user.drop()方法,刪除詳情可以參見http://docs.mongodb.org/manual/tutorial/remove-documents/

開啟認證

  1. 進入admin數據庫,創建root用戶

     > use admin
    
     > db.createUser( {
     user: "用戶名",
     pwd: "密碼",
     roles: [ { role: "root", db: "admin" } ]
     });
    
     > exit
    
  2. 修改mongod.conf中認證配置authorization: enabled

  3. 重啟數據庫

    使用ps -ef | grep mongod命令,打印出MongoDB的后臺進程,得到該進程的pid,再使用kill -15 pid殺掉進程,再啟動MongoDB數據庫,此時再使用mongo命令連接上數據庫后,無法進行任何增刪改查操作。

  4. 登錄認證

     > use admin
     
     > db.auth("用戶名","密碼"); 
    

    之后就可以順利操作了。

結束

我也剛接觸MongoDB沒多久,我覺得MongoDB上手還是很簡單的,把我學習的過程總結下來分享給大家。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • MongoDB是一個基于分布式文件存儲的數據庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方...
    入戲半分笑閱讀 388評論 0 2
  • 安裝 MongoDB Windowns、Ubuntu17.10 下安裝 MongoDB教程在此 MongoDB 幫...
    Kangvcar閱讀 2,121評論 0 13
  • 第一章 前言 1.1 知識體系分析 前端工程師:Web前端,也就是在Web應用中用戶可以看得見碰得著的東西。包括W...
    whitsats閱讀 883評論 0 3
  • 前言 NoSQL 非關系數據庫。MongoDB is an open-source, document datab...
    進擊的前端閱讀 569評論 0 1
  • ###MongoDB是什么? MongoDB是一種強大,靈活,可擴展的存儲方式。與關系型數據庫不同,它是一種面向文...
    明ming閱讀 1,691評論 0 2