MongoDB 入門專欄
http://blog.csdn.net/column/details/19681.html
MongoDB 基本概念
以下是部分SQL術語概念和MongoDB 術語概念的對照:
SQL術語/概念 |
MongoDB術語/概念 |
解釋/說明 |
database |
database |
資料庫 |
table |
collection |
資料庫表/集合 |
row |
document |
資料記錄行/文檔 |
column |
field |
資料欄位/域 |
index |
index |
索引 |
table joins |
|
表串連,MongoDB不支援 |
primary key |
primary key |
主鍵,MongoDB自動將_id欄位設定為主鍵 |
資料庫 database 一個mongodb中可以建立多個資料庫, 預設的資料庫為 "db" ,該資料庫儲存在啟動參數 dbpath 指定的目錄中; MongoDB的單個執行個體可以容納多個獨立的資料庫 database,每一個 database 都有自己的集合 collection 和許可權,不同的資料庫也放置在不同的檔案中;
以下是查看資料庫的一些基本的指令:
# 顯示當前許可權下 mongodb 所有的資料庫
show dbs
show databases
# 顯示當前資料庫物件或集合名稱
db
# 串連(使用)指定的資料庫
use data_name
mongodb 有以下保留資料庫,
admin: 從許可權的角度來看,這是"root"資料庫。要是將一個使用者添加到這個資料庫,這個使用者自動繼承所有資料庫的許可權。一些特定的伺服器端命令也只能從這個資料庫運行,比如列出所有的資料庫或者關閉伺服器;
local: 這個資料永遠不會被複製,可以用來儲存限於本地單台伺服器的任意集合;
config: 當Mongo用於分區設定時,config資料庫在內部使用,用於儲存分區的相關資訊;
集合 colletion collection 是 mongodb 的文檔組,類似於 RDBMS 中的表格 table; 集合存在於資料庫中,集合沒有固定的結構,即在對集合可以插入不同格式和類型的資料,但通常情況下插入集合的資料都會有一定的關聯性,如可以將以下不同資料結構的文檔插入到文檔中:
{"site":"www.baidu.com"}
{"site":"www.google.com","name":"Google"}
以下是查看 collection 的指令:
use local
show collections # 顯示當前 db 下的所有 collection
show tables # 同上
對於 collection 的命名,不能以 "system." 開頭,同時最好不要存在系統保留字元;
文檔 document document 是一組索引值(key-value)對(即BSON),mongo 的文檔不需要設定相同的欄位,並且相同的欄位不需要相同的資料類型; 一個簡單的 document 例子如下:
{"site":"www.google.com","name":"Google"}
在 document 中的值可以是 mongodb 支援的各種資料類型,區分類型和大小寫,在一個 document 不能存在相同的 key,而且 document 的 key 為 string 類型(一般情況下為 UTF-8 編碼格式 );
中繼資料 mongodb 的每一個資料庫的中繼資料(元資訊)儲存在 <db_name>.system.* 下的 collection 中,主要的 colletion 如下:
dbname.system.namespaces |
列出所有名字空間 |
dbname.system.indexes |
列出所有索引 |
dbname.system.profile |
包含資料庫概要(profile)資訊 |
dbname.system.users |
列出所有可訪問資料庫的使用者 |
dbname.local.sources |
包含複製對端(slave)的伺服器資訊和狀態 |
對於修改系統集合中的對象有如下限制。 {system.indexes} 插入資料,可以建立索引,但除此之外該表資訊是不可變的; {system.users} 是可修改的; {system.profile} 是可刪除的;
資料類型
mongoDB 支援多種資料類型,以下是常用的幾種;
String |
字串。儲存資料常用的資料類型。在 MongoDB 中,UTF-8 編碼的字串才是合法的。 |
Integer |
整型數值。用於儲存數值。根據環境所在的伺服器,可分為 32 位或 64 位元。 |
Boolean |
布爾值。用於儲存布爾值(真/假)。 |
Double |
雙精確度浮點值。用於儲存浮點值。 |
Min/Max keys |
將一個值與 BSON(二進位的 JSON)元素的最低值和最高值相對比。 |
Array |
用於將數組或列表或多個值儲存為一個鍵。 |
Timestamp |
時間戳記。記錄文檔修改或添加的具體時間。 |
Object |
用於內嵌文檔。 |
Null |
用於建立空值。 |
Symbol |
符號。該資料類型基本上等同於字串類型,但不同的是,它一般用於採用特殊符號類型的語言。 |
Date |
日期時間。用 UNIX 時間格式來儲存當前日期或時間。你可以指定自己的日期時間:建立 Date 對象,傳入年月日資訊。 |
Object ID |
物件識別碼。用於建立文檔的 ID。 |
Binary Data |
位元據。用於儲存位元據。 |
Code |
代碼類型。用於在文檔中儲存 JavaScript 代碼。 |
Regular expression |
Regex類型。用於儲存Regex。 |
MongoDB ObjectId mongodb 的 ObjectId 用於表示文檔的 _id 鍵,通常為自動產生,ObjectId 是一個 12 位元組的 BSON 類型資料,格式如下:
_id : ObjectId("5a83c0d8a04c12209d79eea1")
<時間戳記-4個位元組><機器識別碼-3個位元組><進程ip(PID)-2個位元組><隨機數-3個位元組>
建立新的ObjectId
> newObjectId = ObjectId()
# 可以使用自己建立的 ObjectId 代替系統自動建立的 ObjectId
> myObjectId = ObjectId("5349b4ddd2781d08c09890f4")
擷取文檔的時間戳記
>ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()
ISODate("2014-04-12T21:49:17Z")
ObjectId 轉換為字串
> new ObjectId().str
5a85711e049466e633bc36ba
MongoDB 的關係 MongoDB 的關係表示多個文檔之間在邏輯上的相互聯絡, 文檔間可以通過嵌入和引用來建立聯絡。 MongoDB 中的關係包括以下: 1:1
1: N
N: 1
N: N
以下是 2 個簡單的文檔結構:
user 文檔
{
"_id":ObjectId("52ffc33cd85242f436000001"),
"name": "Tom Hanks",
"contact": "987654321",
}
address 文檔
{
"_id":ObjectId("52ffc4a5d85242602e000000"),
"building": "22 A, Indiana Apt",
"pincode": 123456,
"city": "Los Angeles",
"state": "California"
}
user 和 address 之間的關係是 1:N ,可以使用以下 2 種方式表示它們的關係:
嵌入式關係 可以將 address 嵌入到 user 文檔種,這樣的優勢是比較直觀,尋找操作方便,但是隨著資料量增大,會很影響讀寫速度;
{
"_id":ObjectId("52ffc33cd85242f436000001"),