为了保存网站的用户数据和业务数据,通常需要一个**数据库**。**MongoDB**和**Node.js**特别般配,因为MongoDB是基于文档的非关系型数据库,文档是按BSON(JSON的轻量化二进制格式)存储的,增删改查等管理数据库的命令和**JavaScript**语法很像。如果你在Node.js里访问MongoDB的数据,会有我们是一家人的感觉,特别亲切。
MongoDB使用集合(collection)和文档(document)来描述和存储数据,collection就相当于表,document相当于行,不过**MySQL**之类的关系型数据库,表结构是固定的,比如某一行由若干列组成,行行都一样,而MongoDB不同,一个集合里的多个文档可以有不同的结构,更灵活一些。
但是直接使用mongoDB模块虽然强大而灵活,但有些繁琐,所以就出现了moogoose,它提供了schma、model、document对象,用起来更为方便。
### 一、名词了解
**schema**: 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力。可以使用schema对象定义文档的结构(类似表结构),可以定义字段和类型,唯一性、索引和验证。
```
var moogoose = require('moogoose')
var schema0 = new moogoose.Schema({
name:{type:String}
age:{type:Number,default:0}
})
//这里定义了scheme0的结构,基本属性类型有:字符串、日期型、数值型、布尔型(Boolean)、null、数组、内嵌文档等
```
**model**: 由schema发布生成的模型,除了Schema定义的数据库骨架以外,还具有数据库操作的行为,类似于管理数据库属性、行为的类。model对象表示集合中的所有文档。
```
var db = mongoose.connect("mongodb://127.0.0.1:27017/test");
// 通过Schema创建Model
var TestModel = db.model("test1", Schema0);
```
**entity**:由Model创建的实体,使用save方法保存数据,Model和Entity都有能影响数据库的操作,但Model比Entity更具操作性。
```
var TestEntity = new TestModel({ name : "Lenka", age : 36, email : "lenka@qq.com"});
console.log(TestEntity.name); // Lenka
console.log(TestEntity.age); // 36
````