[toc]
## 所處層級
數據庫>集合>文檔模型
## 為什么叫文檔而不是直接叫表?
首先有一個錯誤,`文檔模型`這個概念應該與MySQL中的表里的一條記錄 相對應,而不是整個表。
So,文檔是一條記錄,而之所以不直接叫記錄,而叫文檔,是因為mongoDB里的文檔就是一個`JSON對象`,它是可以有灰常多層級的,而可能**不僅僅**是**一條**記錄這么簡單
正常的所謂一條記錄一般是指一條記錄對應多個字段,而文檔這種記錄,可以不僅一個文檔包含多個字段,還能在每個字段里又包含多個字段...
```
const ArticleSchema = new Schema({
title: { type: String, required: true },//標題
content: { type: String, required: true },//正文
user: { type: ObjectId, ref: 'User' },//用戶作者
pv: { type: Number, default: 0 },//page view 頁面的訪問量
comments: [//評論
{ user: { type: ObjectId, ref: 'User' }, content: String, createAt: { type: Date, default: Date.now } }
],
createAt: { type: Date, default: Date.now }//創建時間,默認為當前時間
});
```
上面的例子描述了一個叫做`Article`文檔集合的骨架,我們可以發現文檔集合中的一個文檔可以有很多字段,**且**每個字段內部也可能存在很多"字段"
關于`Schema`骨架,需要注意以下幾點
- 如果對象中的字段在Schema中沒有定義,則會被忽略掉
- 如果說對象中的字段少于Schema中定義的字段, 且少的那部分字段不是必須的,那么缺少的字段不會被保存(缺省,保存的JSON中不會存在這些個字段)
- 如果提供的字段類型和Schema中定義的不匹配,則會報錯