一个非常常用的mongo ORM库
一、准备工作 1. 启动mongo数据库 关于下载安装启动数据库我这里就不做过多解释,谷歌下会有很多教程,启动成功后的命令窗如下所示:
2. 启用可视化Mongo工具 这里我们用的是Robo 3T,为什么要用可视化工具呢,因为小白对于命令行还是很陌生的,在命令行中查看数据库的内容有些不直观,这个可视化工具的安装包谷歌一下就阔以找到啦~
启动可视化工具
连接数据库(前提是已经启动了mongo数据库)
新建数据库mongoosetest
创建成功
数据库准备工作完成后,我们进入代码环节啦~
二、利用mongoose进行简单的数据库操作 1. 新建项目
新建空文件夹,命名为mongooseTest
启动终端,进入该文件夹
在命令行中输入npm init 初始化项目
这里有个小问题就是项目不能以驼峰命名,所以npm init后会让你输入一个别名,我们就叫mongoosetest好了,然后一直Enter,项目创建成功。
下载依赖包 mongoose
完成项目创建,项目结构:
2. 连接数据库 在根目录下创建db.js,输入以下代码,监听connection的几个事件,如果以上操作都没错的话,那么就会监听第一个事件“connect”事件,表示连接数据库成功,在最后,我们导出mongoose对象,以供其他模块使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 var mongoose = require ('mongoose' );var DB_URL = 'mongodb://localhost:27017/mongoosetest' ;mongoose.connect(DB_URL); mongoose.connection.on('connected' ,function ( ) { console .log('Mongoose connect ' + DB_URL + " success" ); }); mongoose.connection.on('error' ,function (err ) { console .log('Mongoose connect Error:' + err); }); mongoose.connection.on('disconnected' ,function ( ) { console .log('Mongoose connect disconnected' ); }); module .exports = mongoose;
运行db.js,如下图所示:
第一步连接数据库成功啦~
3. 新建Schema与发布Model 那么什么是Schema呢?schema是mongoose里会用到的一种数据模式,可以理解为我们传统数据库中的表(table)结构的定义,简单地说,就是一个数据模板,每个schema会映射到mongodb中的一个collection,它不具备操作数据库的能力。
那什么又是Model呢?Model是由Schema发布生成的模型,具有抽象属性和行为的数据库操作对,Model可以直接操作Mongo数据库中的数据。
解释完了代码用说话,新建user.js,输入以下代码,创建一个user的schema,并且利用Schema发布一个Model,导出Model:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 var mongoose = require ('./db.js' );var Schema = mongoose.Schema;var UserSchema = new Schema({ username: {type : String }, userpwd: {type : String }, userage: {type : Number }, logindate: {type : Date } }); module .exports = mongoose.model("User" ,UserSchema);
4. Model创造Entity实体,对数据库操作 那Entity又是什么呢?Entity是由Model创建的实体,他的操作也会影响数据库。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 var User = require ('./user' );function insert ( ) { var user_1 = new User({ username: 'Vince Hua' , userpwd: '123456' , userage: 20 , logindate: new Date () }); user_1.save(function (err, res ) { if (err){ console .log("Error: " + err); }else { console .log("Success Res: " + res) } }); } insert();
以上代码中的user_1就是Model创建的Entity实体,它具有很多操作,svae()只是其中一个。
运行insert.js,命令行输入框得到一下结果:
我们再查看数据库中:
Amazing,我们成功插入一个数据啦~
5. 总结Schema、Model、Entity的关系
Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对
Entity : 由Model创建的实体,他的操作也会影响数据库
Schema、Model、Entity的关系是:Schema生成Model,Model创造Entity,Model和Entity都可对数据库操作造成影响,但Model比Entity更具操作性。
三、mongoose的其他一些 “骚操作”
更新数据库 这里我们是直接用Model来操作数据库,新建update.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 var User = require ("./user.js" );function update ( ) { var wherestr = {'username' : 'Vince Hua' }; var updatestr = {'userpwd' : 'hhhhhh' }; User.update(wherestr, updatestr, function (err, res ) { if (err) { console .log("Error:" + err); } else { console .log("Update Res: " + res); } }) } update();
删除数据 同样我们直接用Model操作数据库,新建remove.js,输入以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 var User = require ("./user" );function del ( ) { var wherestr = {'username' : 'Vince Hua' }; User.remove(wherestr,function (err, res ) { if (err){ console .log("Error: " + err) }else { console .log("Success Remove: " + res); } }) } del();
查找数据
查找数据之前,我们插入一下几个数据
依旧是使用Model操作数据库,新建find.js,输入以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var User = require ('./user' );function findByConditions ( ) { var wherestr = {'username' : 'Mike Guo' }; User.find(wherestr,function (err, res ) { if (err){ console .log("Error: " + err); }else { console .log("Find Res: " + res); } }); } findByConditions();
四、总结 这里介绍的知识简单的mongoose的增删改查操作,只是方便我们第一次接触Mongo入门的小练习的Demo而已,mongoose还有其他强大的操作这里没有一一介绍,希望小伙伴们可以查看中文文档 了解更多,如果你看了这篇文章觉得自己已经入门啦,那么恭喜你~