Mongooose中,有三个比较重要的概念,分别是Schema、Model、Entity。它们的关系是:Schema生成Model,Model创造Document,Model和Document都可对数据库操作造成影响,但Model比Document更具操作性
Schema用于定义数据库的结构。类似创建表时的数据定义(不仅仅可以定义文档的结构和属性,还可以定义文档的实例方法、静态模型方法、复合索引等),每个Schema会映射到mongodb中的一个collection
Model是由Schema编译而成的构造器,具有抽象属性和行为,可以对数据库进行增删查改。Model的每一个实例(instance)就是一个文档document
Document是由Model创建的实体,它的操作会影响数据库
数据库的连接
mongoose基于nodejs以及mongodb,所以需要先安装mongodb模块
npm install mongodb
1、然后使用npm安装mongoose模块
npm install mongoose
2、安装完成后使用require引入mongoose模块
const mongoose=require("mongoose");
3、使用connect()方法连接到MongoDB数据库,与mongodb不同的是,mongoose默认添加端口号(27017),并且在主机名后添加了数据库的名称
mongoose.connect('mongodb://localhost/person',function(err){
if(err){
console.log('连接失败');
}else{
console.log('连接成功');
}
});
如果需要传递登陆用户名以及密码(鉴权控制),可以使用下面链接方式
//mongoose.connect('mongodb://username:password@host:port/database?options...');
mongoose.connect("mongodb://u1:123456@localhost/db1", function(err) {
if(err){
console.log('连接失败');
}else{
console.log('连接成功');
}
});
4、与数据库断开连接——disconnect
mongoose.disconnect(function(){
console.log("断开连接");
})
Schema
5、Schema主要用于定义MongoDB中集合Collection里文档document的结构,使用Schema可以创建一个对象的构造函数,用来声明字段的类型
var PersonSchema = new mongoose.Schema({
name:String,
age:Number,
ex:String
});
如果需要在Schema定义后添加其他字段,可以使用add()方法
var PersonSchema = new Schema;
PersonSchema .add({ name: 'string', color: 'string', price: 'number' });
在schema中设置timestamps为true,schema映射的文档document会自动添加createdAt和updatedAt这两个字段,代表创建时间和更新时间
var UserSchema = new Schema(
{...},
{ timestamps: true }
);
Model
模型Model是根据Schema编译出的构造器,或者称为类,通过Model可以实例化出文档对象document
文档document的创建和检索都需要通过模型Model来处理
6、使用model()方法,将Schema编译为Model。model()方法的第一个参数是模型名称(一定要将model()方法的第一个参数和其返回值设置为相同的值,否则会出现不可预知的结果)第二个参数为模型名称,Mongoose会将集合名称设置为模型名称的小写版。如果名称的最后一个字符是字母,则会变成复数;如果名称的最后一个字符是数字,则不变;如果模型名称为"MyModel",则集合名称为"mymodels";如果模型名称为"Model1",则集合名称为"model1"
var Person = mongoose.model('Person', PersonSchema);
7、对原型Model1使用new方法,实例化出文档document对象
var zs = new Person({
name:'zs',
age:18,
sex:'男'
});
8、通过new Model1()创建的文档doc1,必须通过save()方法,才能将创建的文档保存到数据库的集合中,集合名称为模型名称的小写复数版
zs.save(function (err,obj) {
if (err) throw err;
console.log(obj);
})