Mongoose是在Node.js异步环境下对MongoDB进行便捷操做的对象模型工具。 实际开发中会选用相似mongoose的模块来操做MongoDB数据库以提高开发效率。mongodb
Mongoose三个重要概念:数据库
- Schema:一种以文件形式存储的数据库模型骨架,不具有数据库的操做能力
- Model:由Schema发布生成的模型,具备抽象属性和行为的数据库操做对
- Entity:由Model建立的实体
这是一种以文件形式存储的数据库模型骨架,没法直接通往数据库端,也就是说它不具有对数据库的操做能力,仅仅只是数据库模型在程序片断中的一种表现,能够说是数据属性模型(传统意义的表结构),又或者是集合的模型骨架。基本属性类型有字符串、日期型、数值型、布尔型、null、数组、内嵌文档等。 是Mongoose里会用到的一种数据模式,能够理解为表结构的定义;每一个schema会映射到mongodb中的一个collection。 定义一个Schema:npm
var PersonSchema = new monoose.Schema({
name:{type:String},
age:{type:Number,default:0} ,
time:{type:Date,default:Date.now},
email:{type:String,default:''}
})
复制代码
由Schema构造生成的模型,除了Schema定义的数据库骨架之外,还具备数据库操做的行为,相似于管理数据属性、行为的类。数组
//建立模型,能够用它来操做数据库中的person集合,指的是总体。建立一个person集合
var PersonModel = db.model("person", PersonSchema);
复制代码
person:数据库中的集合名称,当咱们对其添加数据时若是person已经存在,则会保存到其目录下,若是未存在,则会建立person集合,而后再保存数据。有了model,也就有了操做数据的能力。 建立一个Model模型,须要指定两点:1,集合名称;2,集合的Schema结构对象。知足这两点,就能够操做数据库啦。bash
由Model建立的实体,使用save方法保存数据,Model和Entity都能影响数据库的操做,但Model比Entity更具操做性。建立Entity成功后,Schema的属性就变成了Model和Entity的公共属性了。 使用Model建立Entity异步
//根据模型建立实体,是指的个体对象
var personEntity = new PersonModel({
name : "zf",
age : 6,
email: "zf@qq.com",
home:'beijing'
});
复制代码
Schema、Model、Entity的关系:Schema生成Model,Model创造Entity,Model和Entity均可对数据库操做形成影响,但Model比Entity更具操做性。mongoose
关于ObjectId 主键,一种特殊并且很是重要的类型,每一个Schema都会默认配置这个属性,属性名为_id,除非本身定义,方可覆盖。工具
var mongoose = require('mongoose');
var ObjectId = mongoose.Schema.Types.ObjectId;
var StudentSchema = new Schema({}); //默认会有_id:ObjectId
var TeacherSchema = new Schema({id:ObjectId});//只有id:ObjectId
复制代码
Mongoose中的数据类型: • String • Number • Date • Boolean • Buffer • ObjectId • Mixed • Arrayui
须要配置好Node.js环境和安装好MongoDB数据库,Node.js的配置可参考Node.js入门及安装,以及MongoDB数据库的入门MongoDB入门详解spa
打开cmd,定位到项目根目录,执行npm install mongoose --save
命令。
安装完成示例:
var mongoose = require('mongoose'); //引用mongoose模块
var db = mongoose.createConnection('localhost','test'); //建立一个数据库链接
复制代码
db.on('error',console.error.bind(console,'链接错误:'));
db.once('open',function(){
//一次打开记录
});
复制代码
成功开启数据库后,就能够执行数据库相应操做
var PersonSchema = new mongoose.Schema({
name:String //定义一个属性name,类型为String
});
复制代码
var PersonModel = db.model('Person',PersonSchema);
复制代码
var personEntity = new PersonModel({name:'Krouky'});
//打印这个实体的名字看看
console.log(personEntity.name); //Krouky
复制代码
Entity是具备具体的数据库操做CRUD的