./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")
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
>
----------------------------------------------------------------------