天天看點

(轉載)MongoDB資料庫存儲Mongo中繼資料資料庫指令

每個 MongoDB 伺服器都支援多個資料庫。每個資料庫都是相對獨立的,并且出于安全性和為了友善管理,資料庫的資料也獨立存儲。

Mongo中繼資料

在MongoDB資料庫中名字空間 <dbname>.system.* 是包含多種系統資訊的特殊集合(Collection),如下:
  • system.namespaces 列出所有名字空間。
  • system.indexes 列出所有索引。
  • 附加的名字空間(namespace)和索引(index)的中繼資料儲存在database.ns中,是混淆後的形式。
  • system.profile 包含資料庫概要(profile)資訊。
  • system.users 列出所有可通路資料庫的使用者。
  • local.sources 包含複制對端(slave)的伺服器資訊和狀态。
  • 對象的結構資訊存儲在對象内,參見 BSON

對于修改系統集合中的對象有如下限制。在{{system.indexes}}插入資料,可以建立索引。但除此之外該表資訊是不可變的(特殊的drop index指令将自動更新相關資訊)。 {{system.users}}是可修改的。  {{system.profile}}是可删除的。

注意: $ 是保留字元。請不要在名字空間或字段的名字中使用。内部的索引相關的集合将在名字中使用 $ 字元。而這些集合儲存為B-tree集的形式(無法用直接查詢)。

資料庫指令

介紹

Mongo資料庫有資料庫指令(database command)概念。使用這些指令可以讓資料庫執行某中操作或是傳回有關資料庫目前狀态的某些資訊。
  • [資料庫指令清單]

一條指令将被作為針對 $cmd 集合的一種特殊的查詢語句發送到資料庫。資料庫執行後,将傳回一個單文檔對象作為指令的傳回結果,可以用 findOne() 獲得。

基本的指令格式為:

db.$cmd.findOne( { <commandname>: <value> [, options] } ); 
      
在指令行環境下,可以執行:
db.runCommand( { <commandname>: <value> [, options] } ); 
      
例如,檢查目前資料庫profile level的設定,可以執行:
> 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方法去操作:
> db._adminCommand("shutdown"); 
      
(對于這個操作,還有簡便用法db.shutdownServer。)

使用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 
      
(某些指令還沒有完整的幫助資訊.)

一個資料庫可以包括一個或多個集,每個集中可以存放文檔對象,同時可以為操作這些内容設定一個可選的安全認證。

    • 克隆資料庫