MongoDB 基本命令

丶小炒肉發表於2016-05-31

./mongo  進入命令列.

 

 

1、show dbs

顯示當前資料庫伺服器上的資料庫

2、use pagedb

 切換到指定資料庫pagedb的上下文,可以在此上下文中管理pagedb資料庫以及其中的集合等

3、show collections

顯示資料庫中所有的集合(collection)

4、db.serverStatus()  

檢視資料庫伺服器的狀態。

 

5、查詢指定資料庫統計資訊

use fragment

db.stats()

 

6、查詢指定資料庫包含的集合名稱列表

db.getCollectionNames()

 

7、建立資料庫

如果你習慣了關係型資料庫,你可能會尋找相關的建立資料庫的命令。在MongoDB中,你可以直接通過use dbname來切換到這個資料庫上下文下面,系統會自動延遲建立該資料庫

 

8、刪除資料庫

直接使用db.dropDatabase()即可刪除資料庫。

 

 

9、建立集合

可以使用命令db.createCollection(name, { size : ..., capped : ..., max : ... } )建立集合

 

 

 

 

 

10、刪除集合

刪除集合,可以執行db.mycoll.drop()。

 

11、插入更新記錄

直接使用集合的save方法,如下所示:

<em>db.storeCollection.save({'version':'3.5', 'segment':'e3ol6'})</em>  

更新記錄,使用save會將原來的記錄值進行覆蓋實現記錄更新。

 

12、查詢一條記錄

使用findOne()函式,引數為查詢條件,可選,系統會隨機查詢獲取到滿足條件的一條記錄(如果存在查詢結果數量大於等於1)示例如下所示:

 

 

db.storeCollection.findOne({'version':'3.5'})  

{  

        "_id" : ObjectId("4ef970f23c1fc4613425accc"),  

        "version" : "3.5",  

        "segment" : "e3ol6"  

}  

 

 

13、查詢多條記錄

使用find()函式,引數指定查詢條件,不指定條件則查詢全部記錄。

 

 

14、刪除記錄

使用集合的remove()方法,引數指定為查詢條件,示例如下所示:

db.storeCollection.remove({'version':'3.5'})  

 

db.storeCollection.findOne()  

null  

 

 

15、建立索引

可以使用集合的ensureIndex(keypattern[,options])方法,示例如下所示:

 

 

> use pagedb  

switched to db pagedb  

> db.page.ensureIndex({'title':1, 'url':-1})  

> db.system.indexes.find()  

{ "name" : "_id_", "ns" : "pagedb.page", "key" : { "_id" : 1 }, "v" : 0 }  

{ "name" : "_id_", "ns" : "pagedb.system.users", "key" : { "_id" : 1 }, "v" : 0}  

{ "_id" : ObjectId("4ef977633c1fc4613425accd"), "ns" : "pagedb.page", "key" : {"title" : 1, "url" : -1 }, "name" : "title_1_url_-1", "v" : 0 }  

 

上述,ensureIndex方法引數中,數字1表示升序,-1表示降序。

使用db.system.indexes.find()可以查詢全部索引。

 

 

16、查詢索引

我們為集合建立的索引,那麼可以通過集合的getIndexes()方法實現查詢

當然,如果需要查詢系統中全部的索引,可以使用db.system.indexes.find()函式。

 

 

17、刪除索引

刪除索引給出了兩個方法:

db.mycoll.dropIndex(name)  

db.mycoll.dropIndexes()  

 

第一個通過指定索引名稱,第二個刪除指定集合的全部索引。

 

 

18、索引重建

可以通過集合的reIndex()方法進行索引的重建,示例如下所示:

 

 

 

 

 

 

 

 

 

> db.page.reIndex()  

{  

        "nIndexesWas" : 2,  

        "msg" : "indexes dropped for collection",  

        "ok" : 1,  

        "nIndexes" : 2,  

        "indexes" : [  

                {  

                        "name" : "_id_",  

                        "ns" : "pagedb.page",  

                        "key" : {  

                                "_id" : 1  

                        },  

                        "v" : 0  

                },  

                {  

                        "_id" : ObjectId("4ef977633c1fc4613425accd"),  

                        "ns" : "pagedb.page",  

                        "key" : {  

                                "title" : 1,  

                                "url" : -1  

                        },  

                        "name" : "title_1_url_-1",  

                        "v" : 0  

                }  

        ],  

        "ok" : 1  

}  

 

 

 

 

 

19、統計集合記錄數

use fragment

db.baseSe.count()

 

 

統計結果,如下所示:

> use fragment  

switched to db fragment  

> db.baseSe.count()  

36749  

 

上述統計了資料庫fragment的baseSe集合中記錄數。

 

20、查詢並統計結果記錄數

 

use fragment

db.baseSe.find().count()

find()可以提供查詢引數,然後查詢並統計結果,如下所示:

 

> use fragment  

switched to db fragment  

> db.baseSe.find().count()  

36749  

上述執行先根據查詢條件查詢結果,然後統計了查詢資料庫fragment的baseSe結果記錄集合中記錄數。

 

 

21、查詢指定資料庫的集合當前可用的儲存空間

use fragment

> db.baseSe.storageSize()

142564096

 

22、查詢指定資料庫的集合分配的儲存空間

> db.baseSe.totalSize()

144096000

上述查詢結果中,包括為集合(資料及其索引儲存)分配的儲存空間。

 

 

(三)啟動與終止

 

1、正常啟動

mongod --dbpath /usr/mongo/data --logfile /var/mongo.log

說明:

指定資料儲存目錄和日誌目錄,如果採用安全認證模式,需要加上--auth選項,如:

mongod --auth --dbpath /usr/mongo/data --logfile /var/mongo.log 

2、以修復模式啟動

mongod --repair

以修復模式啟動資料庫。

實際很可能資料庫資料損壞或資料狀態不一致,導致無法正常啟動MongoDB伺服器,根據啟動資訊可以看到需要進行修復。或者執行:

mongod -f /etc/mongodb.conf --repair

3、終止伺服器程式

db.shutdownServer()

終止資料庫伺服器程式。或者,可以直接kill掉mongod程式即可。

 

(四)安全管理

 

1、以安全認證模式啟動

mongod --auth --dbpath /usr/mongo/data --logfile /var/mongo.log

使用--auth選項啟動mongod程式即可啟用認證模式。

或者,也可以修改/etc/mongodb.conf,設定auth=true,重啟mongod程式。

2、新增使用者

db.addUser("admin", ",%F23_kj~00Opoo0+\/")

新增資料庫使用者,新增成功,則顯示結果如下所示:

 

{  

        "user" : "admin",  

        "readOnly" : false,  

        "pwd" : "995d2143e0bf79cba24b58b3e41852cd"  

}  

 

(五)資料備份、恢復與遷移管理

 

 

1、備份全部資料庫

mkdir testbak

cd testbak

mongodump

說明:預設備份目錄及資料檔案格式為./dump/[databasename]/[collectionname].bson

2、備份指定資料庫

mongodump -d pagedb

說明:備份資料庫pagedb中的資料。

3、備份一個資料庫中的某個集合

mongodump -d pagedb -c page

說明:備份資料庫pagedb的page集合。

4、恢復全部資料庫

cd testbak

mongorestore --drop  /opt/dump

說明:將備份的所有資料庫恢復到資料庫,--drop指定恢復資料之前刪除原來資料庫資料,否則會造成回覆後的資料中資料重複。

5、恢復某個資料庫的資料

cd testbak

mongorestore -d pagedb --drop /opt/dump/pagedb

說明:將備份的pagedb的資料恢復到資料庫。

6、恢復某個資料庫的某個集合的資料

cd testbak

mongorestore -d pagedb -c page --drop

說明:將備份的pagedb的的page集合的資料恢復到資料庫。

7、向MongoDB匯入資料

mongoimport -d pagedb -c page --type csv --headerline --drop < csvORtsvFile.csv

說明:將檔案csvORtsvFile.csv的資料匯入到pagedb資料庫的page集合中,使用cvs或tsv檔案的列名作為集合的列名。需要注意的是,使用--headerline選項時,只支援csv和tsv檔案。

--type支援的型別有三個:csv、tsv、json

 

 

8、從向MongoDB匯出資料

mongoexport -d pagedb -c page -q {} -f _id,title,url,spiderName,pubDate --csv > pages.csv

說明:將pagedb資料庫中page集合的資料匯出到pages.csv檔案,其中各選項含義:

-f 指定cvs列名為_id,title,url,spiderName,pubDate

-q 指定查詢條件

 

注意:

如果上面的選項-q指定一個查詢條件,需要使用單引號括起來,如下所示:

mongoexport -d page -c Article -q '{"spiderName": "mafengwoSpider"}' -f _id,title,content,images,publishDate,spiderName,url --jsonArray > mafengwoArticle.txt  

 

 

複製資料庫

 

db.copyDatabase("111","222") 

 

 

 

->use Admin         (切換到建立使用者)

->db.TestDb          (建立資料庫) 

->db.addUser(“userName”,”Pwd”)    建立使用者

->db.auth(“userName”,”Pwd”)   設定使用者為允許連線的使用者

->db.createCollection(“TableName”)   建立表

->showcollections          檢視錶是否建立成功

->db.TableName.Save({age:1})    新增資料

->db.TableName.find()                        檢視新增的資料是否成功(如果沒有查詢到任何的結果,說明新增失敗)

 ->新增資料,如果返回的(shell):1 說明有錯誤 

 

 

 

 

 

MongoDB許可權管理之使用者名稱和密碼的操作

 

 

新增使用者的時候必須滿足以下兩個條件:

1.有相關許可權的情況下

2. mongod沒有加--auth的情況下(如果加了,你新增許可權的話 會出現下面的情況)。

----------------------------------------------------------------

 

> use admin    

 

switched to db admin    

 

> db.addUser('sa','sa')    

 

Fri Jul 22 14:31:13 uncaught exception: error {    

 

"$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1",    

 

"code" : 10057    

 

}    

 

>    

 

 

---------------------------------------------------------------------

報錯了......

所以我們新增使用者時必須先在沒有加--auth的時候新增個super  admin。

 

服務起來後,進入./mongo

-----------------------------------------------------------------

 

> use admin    

 

switched to db admin    

  

> db.addUser('sa','sa')    

 

{    

 

"_id" : ObjectId("4e2914a585178da4e03a16c3"),    

 

"user" : "sa",    

 

"readOnly" : false,    

 

"pwd" : "75692b1d11c072c6c79332e248c4f699"    

 

}    

 

>    

---------------------------------------------------------------------

 

 

 

這樣就說明 已經成功建立了,然後我們試一下許可權。

----------------------------------------------------------------------

> show collections    

 

system.indexes    

 

system.users   

 

 

----------------------------------------------------------------------

在沒有加--auth的情況下 可以正常訪問admin  local預設的兩個表。

 

-----------------------------------------------------------------------

> db.system.users.find()    

 

{ "_id" : ObjectId("4e2914a585178da4e03a16c3"), "user" : "sa", "readOnly" : false, "pwd" : "75692b1d11c072c6c79332e248c4f699" }>    

 

----------------------------------------------------------------------- 

 已經成功建立。

下面把服務加上--auth的選項,再進入./mongo

-----------------------------------------------------------------------

 

> use admin    

 

switched to db admin    

 

> show collections    

 

Fri Jul 22 14:38:49 uncaught exception: error: {    

 

"$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1",    

 

"code" : 10057    

 

}    

-----------------------------------------------------------------------

可以看出已經沒有訪問許可權了。

 

我們就用自己的金鑰登入下:

-----------------------------------------------------------------------

> db.auth('sa','sa')    

 

1   

----------------------------------------------------------------------

 

返回1說明驗證成功!

再show collections下就成功了。 

-----------------------------------------------------------------------

登入其它表:

-----------------------------------------------------------------------

 

> use test    

 

switched to db test    

 

> show collections    

 

Fri Jul 22 14:40:47 uncaught exception: error: {    

 

"$err" : "unauthorized db:test lock type:-1 client:127.0.0.1",    

 

"code" : 10057    

 

}   

--------------------------------------------------------------------

 

 

也需要驗證,驗證一下試試..

--------------------------------------------------------------------

 

> use test    

 

switched to db test    

 

> show collections    

 

Fri Jul 22 14:40:47 uncaught exception: error: {    

 

"$err" : "unauthorized db:test lock type:-1 client:127.0.0.1",    

 

"code" : 10057    

 

}    

 

> db.auth('sa','sa')    

 

0   

 

 

----------------------------------------------------------------------

 返回0驗證失敗。 為什麼呢? ...

原因是因為 admin 基於全域性的...所以必須從admin那麼登入 然後 再use其它表才可以。

----------------------------------------------------------------------

 

> use admin  

 

switched to db admin    

 

> db.auth('sa','sa')    

 

1    

 

> use test    

 

switched to db test    

 

> show collections    

 

>    

 

----------------------------------------------------------------------

 

 

如果想單獨訪問一個表,用獨立的使用者名稱,就需要在那個表裡面建相應的user。

 

----------------------------------------------------------------------

 

> use admin    

 

switched to db admin    

 

> db.auth('sa','sa')    

 

1    

 

> use test    

 

switched to db test    

 

> db.addUser('test','test')    

 

{    

 

"user" : "test",    

 

"readOnly" : false,    

 

"pwd" : "a6de521abefc2fed4f5876855a3484f5"    

 

}    

 

>    

----------------------------------------------------------------------

當然必須有相關許可權才可以建立。

 

再登入看看:

----------------------------------------------------------------------

> use test

switched to db test 

 

 

> show collections    

 

Fri Jul 22 14:45:08 uncaught exception: error: {    

 

"$err" : "unauthorized db:test lock type:-1 client:127.0.0.1",    

 

"code" : 10057    

 

}    

 

> db.auth('test','test')  

 

1    

 

> show collections    

 

system.indexes    

 

system.users    

 

>    

 

----------------------------------------------------------------------