🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[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中定义的不匹配,则会报错