# MongoDB 數據庫,對象,集合
## 描述
不管我們學習什么數據庫都應該學習其中的基礎概念,在mongodb中基本的概念是文檔、集合、數據庫,下面我們挨個介紹。
## 數據庫
一個mongodb中可以建立多個數據庫。
MongoDB的默認數據庫為"db",該數據庫存儲在data目錄中。
在MongoDB中可以創建數據庫,如果你想使用MongoDB,創建數據庫不是必要的。
"show dbs" 命令可以顯示所有數據的列表。

執行 "db" 命令可以顯示當前數據庫對象或者集合。

運行"use"命令,可以連接到一個指定的數據庫。

以上實例命令中,"student" 是你要檢索的數據庫。
在下一個章節我們將詳細講解MongoDB中命令的使用。
數據庫名稱可以是任何字符,但是不能包含空字符串,點號(.),或者" "。
"system" 作為系統保留字符串不能作為數據庫名。
數據庫名不能包含 "$"。
## 文檔
文檔是mongodb中的最核心的概念,是其核心單元,我們可以將文檔類比成關系型數據庫中的每一行數據。
多個鍵及其關聯的值有序的放置在一起就是文檔。在mongodb中使用一種類json的bson存儲數據。
bson數據可以理解為在json的基礎上添加了一些json中沒有的數據類型。
如果我們會json,那么bson我們就已經掌握了一半了,至于新添加的數據類型后面我會介紹。
文檔例子如下:
```
{ site : "w3cschool.cc" }
```
通常,"object(對象)" 術語是指一個文件。
文件類似于一個RDBMS的記錄。
我們可以對集合(collection)進行插入,更新和刪除操作。
下表將幫助您更容易理解Mongo中的一些概念:
| RDBMS | MongoDB |
| --- | --- |
| Table(表) | Collection(集合) |
| Column(欄) | Key(鍵) |
| Value(值) | Value(值) |
| Records / Rows(記錄/列) | Document / Object(文檔/對象) |
下表為MongoDB中常用的幾種數據類型。
| 數據類型 | 描述 |
| --- | --- |
| string(字符串) | 可以是一個空字符串或者字符組合。 |
| integer(整型) | 整數。 |
| boolean(布爾型) | 邏輯值 True 或者 False。 |
| double | 雙精度浮點型 |
| null | 不是0,也不是空。 |
| array | 數組:一系列值 |
| object | 對象型,程序中被使用的實體。可以是一個值,變量,函數,或者數據結構。 |
| timestamp | timestamp存儲為64為的值,只運行一個mongod時可以確保是唯一的。前32位保存的是UTC時間,單位是秒,后32為是在這一秒內的計數值,從0開始,每新建一個MongoTimestamp對象就加一。 |
| Internationalized Strings | UTF-8 字符串。 |
| Object IDs | 在mongodb中的文檔需要使用唯一的關鍵字_id來標識他們。幾乎每一個mongodb文檔都使用_id字段作為第一個屬性(在系統集合和定容量集合(capped collection)中有一些例外)。_id值可以是任何類型,最常見的做法是使用ObjectId類型。 |
## 集合
集合就是一組文檔的組合。如果將文檔類比成數據庫中的行,那么集合就可以類比成數據庫的表。
在mongodb中的集合是無模式的,也就是說集合中存儲的文檔的結構可以是不同的,比如下面的兩個文檔可以同時存入到一個集合中:
```
{"name":"mengxiangyue"} {"Name":"mengxiangyue","sex":"nan"}
```
當第一個文檔插入時,集合就會被創建。
## 合法的集合名
集合名稱必須以字母或下劃線開頭。
集合名可以保護數字
集合名稱不能使美元符"$","$"是系統保留字符。
集合的名字 最大不能超過128個字符 。
另外,"."號的使用在集合當中是允許的,它們被成為子集合(Subcollection);比如你有一個blog集合,你可以使用blog.title,blog.content或者blog.author來幫組你更好地組織集合。
如下實例:
```
db.tutorials.php.findOne()
```
## capped collections
Capped collections 就是固定大小的collection。
它有很高的性能以及隊列過期的特性(過期按照插入的順序). 有點和 "RRD" 概念類似。
Capped collections是高性能自動的維護對象的插入順序。它非常適合類似記錄日志的功能 和標準的collection不同,你必須要顯式的創建一個capped collection, 指定一個collection的大小,單位是字節。collection的數據存儲空間值提前分配的。
要注意的是指定的存儲大小包含了數據庫的頭信息。> db.createCollection("mycoll", {capped:true, size:100000})
* 在capped collection中,你能添加新的對象。
* 能進行更新,然而,對象不會增加存儲空間。如果增加,更新就會失敗 。
* 數據庫不允許進行刪除。使用drop()方法刪除collection所有的行。
* 注意: 刪除之后,你必須顯式的重新創建這個collection。
* 在32bit機器中,capped collection最大存儲為1e9( 1X109)個字節。
## 元數據
數據庫的信息是存儲在集合中。它們使用了系統的命名空間:
```
dbname.system.*
```
在MongoDB數據庫中名字空間 <dbname>.system.* 是包含多種系統信息的特殊集合(Collection),如下:
| 集合命名空間 | 描述 |
| --- | --- |
| dbname.system.namespaces | 列出所有名字空間。 |
| dbname.system.indexes | 列出所有索引。 |
| dbname.system.profile | 包含數據庫概要(profile)信息。 |
| dbname.system.users | 列出所有可訪問數據庫的用戶。 |
| dbname.local.sources | 包含復制對端(slave)的服務器信息和狀態。 |
對于修改系統集合中的對象有如下限制。
在{{system.indexes}}插入數據,可以創建索引。但除此之外該表信息是不可變的(特殊的drop index命令將自動更新相關信息)。
{{system.users}}是可修改的。 {{system.profile}}是可刪除的。
- NoSQL 簡介
- 什么是MongoDB ?
- window平臺安裝 MongoDB
- Linux平臺安裝MongoDB
- MongoDB 數據庫,對象,集合
- MongoDB - 連接
- PHP安裝MongoDB擴展驅動
- MongoDB 數據插入
- MongoDB使用update()函數更新數據
- MongoDB使用- remove()函數刪除數據
- MongoDB 查詢
- MongoDB條件操作符
- MongoDB條件操作符 - $type
- MongoDB Limit與Skip方法
- MongoDB 排序
- MongoDB 索引
- MongoDB 聚合
- MongoDB 復制(副本集)
- MongoDB 分片
- MongoDB 備份(mongodump)與恢復(mongorerstore)
- MongoDB 監控
- MongoDB Java
- MongoDB PHP
- MongoDB 關系
- MongoDB 數據庫引用
- MongoDB 覆蓋索引查詢
- MongoDB 查詢分析
- MongoDB 原子操作
- MongoDB 高級索引
- MongoDB 索引限制
- MongoDB ObjectId
- MongoDB Map Reduce
- MongoDB 全文檢索
- MongoDB 正則表達式
- MongoDB 管理工具: Rockmongo
- MongoDB GridFS
- MongoDB 固定集合(Capped Collections)
- MongoDB 自動增長
- 免責聲明