一、mongoose介绍
Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具。 Mongoose
是 NodeJS 的驱动, 不能作为其他语言的驱动。
Mongoose 有两个特点:
1、 通过关系型数据库的思想来设计非关系型数据库
2、 基于 mongodb 驱动, 简化操作
二、mongoose的安装以及使用
1.安装
npm/cnpm mongoose --save
2.引入mongoose并连接数据库
const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/test'); 如果有账户密码需要采用下面的连接方式: mongoose.connect('mongodb://eggadmin:123456@localhost:27017/eggcms');
3.定义Schema
数据库中的 Schema, 为数据库对象的集合。 schema 是 mongoose 里会用到的一种数据模式,
可以理解为表结构的定义; 每个 schema 会映射到 mongodb 中的一个 collection, 它不具备
操作数据库的能力
var UserSchema=mongoose.Schema({ name: String, age:Number, status:'number' })
4.创建数据模型
model 是由 schema 生成的模型, 可以对数据库的操作。
注意: mongoose.model 里面可以传入两个参数也可以传入三个参数
mongoose.model(参数 1:模型名称(首字母大写) , 参数 2:Schema)
传两个参数,默认会和模型名称相同的复数的集合建立连接,例如模型名称为"User",则会默认操作users这个集合
var User=mongoose.model('User', UserSchema);
mongoose.model(参数 1:模型名称(首字母大写) , 参数 2:Schema, 参数 3:数据库集合名称)
传三个参数,会和第三个参数的集合建立连接,操作第三个参数的集合
var User=mongoose.model('User', UserSchema,'users');
5.查找数据
User.find({},function(err,docs){ if(err){ console.log(err); return; }
console.log(docs); })
6.增加数据
var u=new User({ //实例化模型 传入增加的数据 name:'lisi2222333', age:20, status:true })
u.save(function(err,docs){
if(err){
console.log(err);
return;
}
console.log(docs);
})
7.修改数据
User.updateOne({ name: 'lisi2222' }, { name: '哈哈哈' }, function(err, res) { if(err){ console.log(err); return; }
console.log('成功') });
8.删除数据
User.deleteOne({ _id: '5b72ada84e284f0acc8d318a' }, function (err) { if (err) { console.log(err); return; }
// deleted at most one tank document console.log('成功'); });
9.保存成功查找
var u=new User({ name:'lisi2222333', age:20, status:true //类型转换 }) u.save(function(err,docs){ if(err){ console.log(err); return; }
//console.log(docs); User.find({},function(err,docs){ if(err){ console.log(err); return; }
console.log(docs); }) });
三、默认参数
在定义schema时,设置默认参数
var UserSchema=mongoose.Schema({ name:String, age:Number, status:{ type:Number, default:1 //默认为1 } })
四、模块化
1.先创建数据库连接模块moongoose
//连接数据库 var mongoose=require('mongoose'); //useNewUrlParser这个属性会在url里识别验证用户所需的db,未升级前是不需要指定的,升级到一定要指定。 mongoose.connect('mongodb://127.0.0.1:27017/eggcms',{ useNewUrlParser: true },function(err){ if(err){ console.log(err); return; } console.log('数据库连接成功') }); module.exports=mongoose; //输出mongoose
2.创建user模块
var mongoose=require('./db.js'); var UserSchema=mongoose.Schema({ name:String, age:Number, status:{ type:Number, default:1 } }) module.exports=mongoose.model('User',UserSchema,'user');
3.创建news模块
var mongoose=require('./db.js'); var NewsSchema=mongoose.Schema({ title:"string", author:String, pic:String, content:String, status:{ type:Number, default:1 } }) module.exports=mongoose.model('News',NewsSchema,'news');
4.使用模块
var UserModel=require('./model/user.js'); var NewsModel=require('./model/news.js'); var user=new UserModel({ name:"李四666", age:40 }) user.save(function(err){ if(err){ console.log(err); return; } //获取user表的数据 UserModel.find({},function(err,docs){ if(err){ console.log(err); return; } console.log(docs); }) }) // NewsModel.find({},function(err,docs){ // if(err){ // console.log(err); // return; // } // console.log(docs); // })
五、模块性能
多个模块,不会多次连接数据库,只会在引入第一个模块时连接数据库
可以通过以下代码测试
console.time('user'); var UserModel=require('./model/user.js'); console.timeEnd('user'); console.time('news'); var NewsModel=require('./model/news.js'); console.timeEnd('news');
结果是:第一次时间大于第二次