1. 程式人生 > 其它 >mongodb安裝與常用命令

mongodb安裝與常用命令

NoSQL Mongodb

  • 下載mongodb的版本,兩點注意
    • 根據業界規則,偶數為穩定版,如1.6.X,奇數為開發版,如1.7.X
    • 32bit的mongodb最大隻能存放2G的資料,64bit就沒有限制

效能

BSON格式的編碼和解碼都是非常快速的。它使用了C風格的資料表現形式,這樣在各種語言中都可以高效地使用。

NoSQL(NoSQL = Not Only SQL ),意即"不僅僅是SQL"。

MongoDB 將資料儲存為一個文件,資料結構由鍵值(key=>value)對組成。MongoDB 文件類似於 JSON 物件。欄位值可以包含其他文件,陣列及文件陣列。d

一、MongoDB 概念解析

SQL術語/概念 MongoDB術語/概念 解釋/說明
database database 資料庫
table collection 資料庫表/集合
row document 資料記錄行/文件
column field 資料欄位/域
index index 索引
table joins 表連線,MongoDB不支援
primary key primary key 主鍵,MongoDB自動將_id欄位設定為主鍵

二、安裝

下載mongodb的版本,兩點注意

  • 根據業界規則,偶數為穩定版,如1.6.X,奇數為開發版,如1.7.X
  • 32bit的mongodb最大隻能存放2G的資料,64bit就沒有限制

一, MongoDB與安裝(windows)

首先去官網下載MongoDB的安裝包, https://www.mongodb.com/try/download/community







將mongodb目錄下的bin資料夾新增到環境變數


對於mac的安裝可以使用homebrew安裝. 或參考這裡https://www.runoob.com/mongodb/mongodb-osx-install.html

三、資料型別

  • 下表為MongoDB中常用的幾種資料型別:
  • Object ID:文件ID
  • String:字串,最常用,必須是有效的UTF-8
  • Boolean:儲存一個布林值,true或false
  • Integer:整數可以是32位或64位,這取決於伺服器
  • Double:儲存浮點值
  • Arrays:陣列或列表,多個值儲存到一個鍵
  • Object:用於嵌入式的文件,即一個值為一個文件
  • Null:儲存Null值
  • Timestamp:時間戳
  • Date:儲存當前日期或時間的UNIX時間格式

需要注意的是:

  1. 文件中的鍵/值對是有序的。
  2. 文件中的值不僅可以是在雙引號裡面的字串,還可以是其他幾種資料型別(甚至可以是整個嵌入的文件)。
  3. MongoDB區分型別和大小寫。
  4. MongoDB的文件不能有重複的鍵。
  5. 文件的鍵是字串。除了少數例外情況,鍵可以使用任意UTF-8字元。

文件鍵命名規範:

  • 鍵不能含有\0 (空字元)。這個字元用來表示鍵的結尾。
  • .和$有特別的意義,只有在特定環境下才能使用。
  • 以下劃線"_"開頭的鍵是保留的(不是嚴格要求的)。

四、連結Mongodb

(1) cd mongo安裝的目錄/bin

輸入 mongod.exe --dbpath=路徑

(2) 重新啟動一個Windows的終端 再次進入到 mongo安裝的目錄/bin

​ cd mongo安裝的目錄/bin

​ mongo.exe #此刻 進入到Mongodb資料庫了

五、 對於庫的操作

(1) 檢視所有的庫

​ show dbs

(2) 選擇資料庫 (如果使用的資料庫存在 則使用 不存在 則建立)

​ use 庫名

​ 注意:

​ 新建立的資料庫 預設你是看不到的 可以使用db/db.getName() 去檢視當前所在的庫 往新的庫裡建立集合

(3) 檢視當前所在的資料庫
1. db
2. db.getName()
(4) 建立集合(也就是建立表)
  1. db.createCollection("集合名")

    例如:db.createCollection("user") #建立一個user的集合 在當前的庫裡

  2. db.集合名.insert(文件) #如果 當前的集合名不存在 那麼就建立該集合 並插入文件(資料)

注意:

1. 在庫裡對於文件 集合的操作 統一使用db. (db代表當前的庫)
2. 嚴格區分大小寫
(5) 檢視當前庫下的所有集合

​ show collections

(6) 刪除集合

​ db.集合名.drop()

六、INSERT/SAVE文件的新增

(1) 使用insert 如果是新增資料 建議使用 insert

​ db.集合名.insert(文件) #如果是新增資料 建議使用 insert

插入多條資料:

​ db.集合名.insert([文件]) #注意 一定要加[] 否則可能只會把 第一條文件插入進去

3.2 版本後還有以下幾種語法可用於插入文件:

  • db.collection.insertOne():向指定集合中插入一條文件數z據
  • db.collection.insertMany():向指定集合中插入多條文件資料
(2) 使用save
  1. db.集合名.save(文件) #新新增 一個文件

  2. db.集合名.save({_id:ObjectId("59a385d4a356cb252c1dcd73"),文件}) #對原有的資料進行覆蓋

 db.user.save({_id:ObjectId("59a385d4a356cb252c1dcd73"),name:"王五"})

七、FIND 查詢

(1) find 查詢所有

​ db.集合名.find([條件],{key1:1[,[key2:1]]}) #查詢所有的資料 代表 顯示哪些欄位名

​ db.collection.find(query, {title: 1, by: 1}) // inclusion模式 指定返回的鍵,不返回其他鍵

​ db.collection.find(query, {title: 0, by: 0}) // exclusion模式 指定不返回的鍵,返回其他鍵

注意:

兩種模式不可混用(因為這樣的話無法推斷其他鍵是否應返回)

db.collection.find(query, {title: 1, by: 0}) // 錯誤

_id 鍵預設返回,需要主動指定 _id:0 才會隱藏

只能全1或全0,除了在inclusion模式時可以指定_id為0

db.collection.find(query, {_id:0, title: 1, by: 1}) // 正確
(2) findOne() 查詢一條

​ db.集合名.findOne([條件],{key1:1[,[key2:1]]}) #查詢一條資料 代表 顯示哪些欄位名

(3) count 統計資料條數

​ db.集合名.find([條件]).count()

(4) pretty() 展開來檢視

​ db.集合名.find([條件]).pretty()

(5) 查詢條件的操作符
符號 符號說明 例項 說明
$gt 大於 db.user.find({age:{$gt:18}}) 年齡大於18 的
$gte 大於等於 db.user.find({age:{$gte:18}}) 年齡大於等於18的
$lt 小於 db.user.find({age:{$lt:18}}) 年齡小於18
$lte 小於等於 db.user.find({age:{$lte:18}}) 年齡小於等於18
{key:value} 等於 db.user.find({age:18}) 年齡等於18
{ "_id" : ObjectId("5c2caba840b9441054372217")} 使用id查詢 db.user.find({ "_id" : ObjectId("5c2caba840b9441054372217")}) 查詢id為"5c2caba840b9441054372217"文件
/值/ 模糊查詢 db.user.find({username:/小/}) 查詢年齡中包含小字的文件
/^值/ 以...作為開頭 db.user.find({username:/^小/}) 查詢username中以小字作為開頭的文件
/值$/ 以...作為結尾 db.user.find({username:/小$/}) 查詢username中以小字作為結尾的文件
$in 在...內 db.user.find({age:{$in:[18,20,30]}) 查詢年齡在18,20,30的文件
$nin 不在...內 db.user.find({age:{$nin:[18,20,30]}}) 查詢年齡不在 1,20,30的文件
$ne 不等於 != db.user.find({age:{$ne:18}}) 查詢年齡不為18的文件
(6) AND 查詢
db.col.find({key1:value1, key2:value2}).pretty()

db.集合名.find({條件一,條件二,,,})

例如:

​ db.user.find({name:"張三",age:{$gt:10}}) #查詢name為張三的 且 年齡 大於10歲的

​ db.user.find({name:"張三",age:10}) #查詢name為張三的 且 年齡為10歲的

​ db.user.find({name:"張三",age:{$gte:10,$lte:28}}) #name為張三 年齡 大於等於10 小於等於28

(7) OR 查詢

db.集合名.find({$or:[{條件一},{條件二},,,]})

例如:
​ db.user.find({$or:[{name:"張三"},{name:"趙六"}]}) #查詢name為張三 或者為趙六的所有資料

​ db.col.find({$or:[{"by":"lucky"},{"title": "MongoDB 教程"}]}).pretty()

(8) AND 和 OR 的使用

db.集合名.find({條件一,,,$or:[{條件1},{條件2}]})

例如:

​ db.user.find({name:"張三",$or:[{age:10},{age:28}]}) #name為張三 年齡為10歲或者28歲的所有資料

​ db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鳥教程"},{"title": "MongoDB 教程"}]}).pretty()

(9) LIMIT 取值

db.集合名.find().limit(num) #從第0個開始取幾個

例如:

​ db.user.find().limit(5) #從0開始取5條資料

(10) skip 跳過幾個

db.集合名.find().skip(num) #跳過幾條資料

例如:

db.user.find().skip(2) #從第三條資料 取到最後

(11) limit skip 配合使用

db.集合名.find().skip().limit(num)

例如:

​ db.user.find().skip(2).limit(2) #從第三個開始 取2個

(12) SORT 排序

在MongoDB中使用使用sort()方法對資料進行排序,sort()方法可以通過引數指定排序的欄位,並使用 1 和 -1 來指定排序的方式,其中 1 為升序排列,而-1是用於降序排列。

db.集合名.find().sort({key:1|-1}) #升序或者降序

例如:

​ db.user.find().sort({age:1}) #查詢所有資料 按照年齡 升序

​ db.user.find().sort({age:-1}) #查詢所有資料 按照年齡 降序

八、UPDATE 文件的修改

結構:

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)u
  • **query **: update的查詢條件,類似sql update查詢內where後面的。
  • **update **: update的物件和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set後面的
  • **upsert **: 可選,這個引數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,預設是false,不插入。
  • **multi **: 可選,mongodb 預設是false,只更新找到的第一條記錄,如果這個引數為true,就把按條件查出來多條記錄全部更新
(1) 更新操作符 $set直接修改 $inc累加修改
  • db.集合名.update(條件,資料,{multi:true}) 更改

    db.user.update({name:"張三"},{$inc:{age:5}}) #修改name為張三的文件 將age在原有的基礎上 加5

    db.user.update({name:"張三"},{$set:{age:5}}) #修改name為張三的文件 將age的值 修改為5

    db.user.update({name:"張三"},{$set:{age:5}},{multi:true}) #將所有name為張三的文件 的年齡 全部修改為 5

  • 只更新第一條記錄:

    db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );

  • 全部更新:

    db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );

  • 只新增第一條:

    db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );

(2) 刪除集合中所有文件的一個域
  • db.posts.update({}, { $unset: { deleted_at: 1 } }, { multi: true })

    1.第一個引數表示選中某些文件,這裡為 {} 表示選中當前 posts 集合中的所有文件
    2.第二個引數為具體的更新操作,$unset 表示刪除域
    3.第三個引數為額外選項,{ multi: true } 表示更新所有滿足要求的文件,預設只會更新第一個

  • 也可以同時刪除多個域 程式碼如下:
    db.categories.update({}, { $unset: { deleted_at: 1, desc: 1 } }, { multi: true })

    也以同時刪除和新增域 程式碼如下:

    db.tags.update(
        {},
        { $unset: { deleted_at: 1 }, $set: { slug: 1, description: 1 } },
        { multi: true }
    )
    
  • 3.2版本以後

updateOne() 更新一條

updateMany(query,update,true/false) 更新多條 第三個引數為upsert:true/false

九、REMOVE 文件的刪除

主體結構

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)
(1)引數說明:
  • **query **:(可選)刪除的文件的條件。
  • **justOne **: (可選)如果設為 true 或 1,則只刪除一個文件。
  • **writeConcern **:(可選)丟擲異常的級別。
(2) 主體結構

db.集合名.remove(條件) #預設將所有都匹配到的資料進行刪除

db.集合名.remove(條件,1) #只刪除 第一個匹配到的資料

db.集合名.remove(條件,,{justOne:true}) #只刪除 第一個匹配到的資料

db.t.remove({price:{$gte:16},price:{$lte:32}}) #刪除 價格在 16-32之間的所有資料

db.col.remove({}) 清空集合 "col" 的資料

(3) 3.2 版本後還有以下幾種語法可用於刪除文件:

remove() 方法已經過時了,現在官方推薦使用

deleteOne() 刪除一條

deleteMany() 刪除多條

十、建立索引 ensureIndex() 方法

MongoDB使用 ensureIndex() 方法來建立索引。

(1) 語法

ensureIndex()方法基本語法格式如下所示:

>db.COLLECTION_NAME.ensureIndex({KEY:1})

語法中 Key 值為你要建立的索引欄位,1為指定按升序建立索引,如果你想按降序來建立索引指定為-1即可。

(2) 例項
>db.col.ensureIndex({"title":1})

ensureIndex() 方法中你也可以設定使用多個欄位建立索引(關係型資料庫中稱作複合索引)。

>db.col.ensureIndex({"title":1,"description":-1})

十一、資料庫刪除與退出

(1) 資料庫刪除
  1. 刪除之前 最好use一下
  2. db.dropDatabase()
(2) 資料庫的退出

exit

十三、MongoDB 備份(mongodump)與恢復(mongorestore)

備份:
>mongodump -h dbhost -d dbname -o dbdirectory
  • -h:MongDB所在伺服器地址,例如:127.0.0.1,當然也可以指定埠號:127.0.0.1:27017
  • -d:需要備份的資料庫例項,例如:test
  • -o:備份的資料存放位置,例如:c:\data\dump,當然該目錄需要提前建立,在備份完成後,系統自動在dump目錄下建立一個test目錄,這個目錄裡面存放該資料庫例項的備份資料。

在本地使用 27017 啟動你的mongod服務。開啟命令提示符視窗,進入MongoDB安裝目錄的bin目錄輸入命令mongodump:

>mongodump -h127.0.0.1 -ddemo -o C:\mongodb
MongoDB資料恢復

mongorestore命令指令碼語法如下:

>mongorestore -h <hostname><:port> -d dbname <path>
  • --host <:port>, -h <:port>:MongoDB所在伺服器地址,預設為: localhost:27017
  • --db , -d :需要恢復的資料庫例項,例如:test,當然這個名稱也可以和備份時候的不一樣,比如test2
  • --drop:恢復的時候,先刪除當前資料,然後恢復備份的資料。就是說,恢復後,備份後新增修改的資料都會被刪除,慎用哦!
  • mongorestore 最後的一個引數,設定備份資料所在位置,例如:c:\data\dump\test。你不能同時指定 和 --dir 選項,--dir也可以設定備份目錄。
  • --dir:指定備份的目錄你不能同時指定 和 --dir 選項。

mongodb使用 mongorestore 命令來恢復備份的資料。

mongorestore -h127.0.0.1 -ddemo  C:\mongodb\demo(備份資料所在的位置)
注意:

不管是備份還是恢復資料 都先將服務執行起來 再次新建終端 來執行備份或者恢復的命令