mongodb指南(翻譯)(六) – developer zone – 資料庫之命令(一)

來源:互聯網
上載者:User

每一個mongodb伺服器可以支援多個資料庫。出於安全和方便管理的考慮,每一個資料庫都是獨立的,並且每一個資料庫的資料也是分開儲存的。

一個資料庫由一個或多個集合組成,文檔(對象)儲存在集合中,一個可選的安全性憑證可以控制訪問。

 

命令

簡介

mongo資料庫有一個資料庫命令的概念。資料庫命令可以告訴資料庫執行一些特殊的操作,或者請求當前操作的狀態資訊。

一條命令是作為針對名為$cmd的特殊集合的查詢發送給資料庫的。資料庫會把命令結果放到一個單獨的文檔中返回-使用findOne()查看一下你的驅動是否有這個功能。

一般情況下命令的文法是:

db.$cmd.findOne( { <commandname>: <value> [, options] } );

shell為它提供了輔助函數:

db.runCommand( { <commandname>: <value> [, options] } );

例如,查看我們資料庫當前輪廓(profile)層級設定,我們可以調用:

> db.runCommand({profile:-1});
{
"was" : 0.0 ,
"ok" : 1.0
}

對於很多的資料庫命令,一些驅動實現封裝了一些方法使得更加容易使用。例如,mongo shell提供了:

> db.getProfilingLevel()
0.0

讓我們看一下這個方法都做了什麼:

> print( db.getProfilingLevel )
function () {
var res = this._dbCommand({profile:-1});
return res ? res.was : null;
}
> print( db._dbCommand )
function (cmdObj) {
return this.$cmd.findOne(cmdObj);
}

很多命令都有輔助函數-查看你的驅動的文檔來擷取更多資訊。

 

特權命令
某些操作僅僅是為資料庫管理員準備的。這些特權操作可能僅會在名為admin的特殊資料庫上執行.

> use admin;
> db.runCommand("shutdown"); // shut down the database

如果資料庫變數沒有設定為admin,你可以使用adminCommand(在早於1.8的版本中是_adminCommand)自動切換到正確的資料庫(只對當前操作有用):

> db.adminCommand("shutdown");

(對於這個特別的命令,這裡還有一個shell輔助函數,db.shutdownServer.)

 

擷取某個命令的協助資訊

在shell中使用commandHelp可以擷取某個命令的協助資訊:

> db.commandHelp("datasize")
help for: datasize example: { datasize:"blog.posts", keyPattern:{x:1}, min:{x:10}, max:{x:55} }
NOTE: This command may take awhile to run

(有些命令目前尚無協助資訊)

 

getLog命令

log相關的命令

使用getLog命令你可以得到一個log類別變數的列表,和針對這些類別所有的訊息。這個命令在1.9.2中引入。

> db.adminCommand({getLog:"*|global|<cat>"})

擷取類別

傳遞給getLog一個"*"選項,就可以擷取到所有可能存在的log類別:

> db.adminCommand({getLog:"*"})
{
"names" : [
"global",
"rs",
"startupWarnings" ],
"ok" : 1
}

輸出表明這裡有3種類別的log可用:"global"(見下),複製組通知,啟動警告。
"global"類別

這個特殊的“global”類別包含了所有其他類別。你可以傳入任何類別來限制返回的行。

> db.adminCommand({getLog:"global"})
{
"log" : [
"Thu Aug 18 13:57:05 [initandlisten] MongoDB starting : pid=654312892 port=27017
dbpath=/tmp/db1/ 64-bit host=localnose",
"Thu Aug 18 13:57:05 [initandlisten] recover : no journal files present, no recovery needed",
"Thu Aug 18 13:57:07 [websvr] admin web console waiting for connections on port 28017",
"Thu Aug 18 13:57:07 [initandlisten] waiting for connections on port 27017",
"Thu Aug 18 13:57:07 [initandlisten] connection accepted from 127.0.0.1:56703 #1",
"Thu Aug 18 13:57:07 [rsStart] replSet STARTUP2",
"Thu Aug 18 13:57:07 [rsSync] replSet SECONDARY",
"Thu Aug 18 13:57:10 [initandlisten] connection accepted from 127.0.0.1:56704 #2"
],
"ok" : 1
}

 

setParameter命令

設定運行時參數

這個命令允許在運行時改變一些內部選項和一些命令列參數。

這個命令在1.8加入但是一些選項在那之後已經改變了。請關注它們變得可用的版本。

> db.adminCommand({setParameter:1, option1:true, ...})
// real example to increase logging
> db.adminCommand({setParameter:1, logLevel:4})
//disallow table/collection scans
> db.adminCommand({setParameter:1, notablescan:true})
{ "was" : false, "ok" : 1 }
> db.foo.insert({_id:1, name:false})
> db.foo.find()
{ "_id" : 1 , "name" : false }
> db.foo.find({name:true})
error: { "$err" : "table scans not allowed:test.foo", "code" : 10111 }
> db.adminCommand({setParameter:1, notablescan:false})
{ "was" : true, "ok" : 1 }
> db.foo.find({name:true})

選項

 選項  值  描述  可用版本
 syncdelay  數字  記憶體重新整理間隔  1.8
 logLevel  整型(0-5)  設定記錄層級  1.8
 quiet  true/false  記錄安靜模式  1.8
 notablescan  true/false  在需要表掃描時觸發錯誤  1.8
 journalCommitInterval  數字(1-500ms)  日誌(組)提交視窗  1.9.1

擷取參數狀態
正像你可以設定運行時的參數,你還可以擷取他們。

> db.adminCommand({getParameter:1, syncdelay:true})
{ "syncdelay" : 60, "ok" : 1 }

 

cloneCollection命令

從一台伺服器拷貝單個集合到另一台伺服器。

db.runCommand( { cloneCollection: <namespace>,
from: <host> [,query: <query_filter>] [,copyIndexes:<bool>] } );

從一個伺服器向另一個伺服器拷貝集合。不要在單個的伺服器上面使用,因為它儲存的目標和源是同一個db.collection(命名空間).

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.