MongoDB不是關系型數據庫,因此也就沒有了表,行等概念,但是有一些類似的概念,主要有 數據庫(Database),集合(Collection),文檔(Document),其中數據庫跟關系型數據庫的數據庫是一個概念,集合相當于表,文檔相當于行。下面分別來介紹這些概念。
?
1. 文檔:
文檔是MongoDB的核心概念,也是MongoDB種數據的基本單元。所謂文檔就是多個鍵及其關聯的值有序的放置在一起。如,
{"greeting":"Hello World!"}
在這個文檔中,"greeting"是鍵,"Hello World!"是值
當然,絕大多數的文檔包含多個鍵/值,比這個要復雜的多,如:
{"author":"Tian","Sex":"M","hobby":"MBK"}
甚至文檔里面還包含文檔。
?
1.1 文檔的鍵的命名規則
1). 文檔的鍵是字符串;
2). 鍵不能包含有\0(空字符),這個字符用來表示鍵的結尾;
3). $和.有特殊的含義,被保留了;
4). 以下劃線"_"的鍵被保留了,雖然這個并不是嚴格的要求。
5). 文檔的鍵不能重復
6). 區分大小寫,如{"author":"tian"}和{"Author":"tian"}是不一樣的
?
2. 集合
集合,指的是一組文檔。
MongoDB的集合雖然類似于關系數據庫的表,但是,集合是無模式的,不必像關系數據庫的表那樣,必須事先定義,并且結構固定。
我們可以將以下2個文檔存到同一個集合中:
{"author":"tian"}
{"age":6}
這兩個文檔,鍵不一樣,對應的值也不一樣,甚至類型也不一樣,而這在關系數據庫中是不可想象的。
?
2.1 集合的命名
1). 集合名不能是空字符串""
2). 集合名不能含有\0(空字符),這個字符是集合名的結尾
3). 集合名不能以"system."開頭,以"system."開頭表示系統集合,如system.users這個集合保留數據庫用戶的信息,system.namespaces這個集合保存數據庫所有集合的信息
4). 用戶創建的集合名字不能含有保留字符$
?
2.2 子集合
我們可以通過"."字符分開的按命名空間劃分的子集合來組織集合。如,一個帶有博客功能的應用可能包含2個集合blog.authors和blog.posts,這樣做的目的只是為了組織更好,事實上, 我們不一定存在blog這個集合的。
?
3. 數據庫
多個集合組成數據庫。一個MongoDB實例可以包含多個數據庫,他們之間可以視為完全獨立。
?
3.1 數據庫命名
1). 不能是空字符串;
2). 不能含有空格、.、$、/、\、和\0;
3). 應全部小寫;
4). 最多64字節;
5). 不能是保留的數據庫名:admin,local,config
?
參考:MongoDB權威指南