一、准备工作
1. 启动mongo数据库
关于下载安装启动数据库我这里就不做过多解释,谷歌下会有很多教程,启动成功后的命令窗如下所示:

image
2. 启用可视化Mongo工具
这里我们用的是Robo 3T,为什么要用可视化工具呢,因为小白对于命令行还是很陌生的,在命令行中查看数据库的内容有些不直观,这个可视化工具的安装包谷歌一下就阔以找到啦~
- 启动可视化工具 
- 连接数据库(前提是已经启动了mongo数据库) 

image
- 新建数据库mongoosetest 

image

image
- 创建成功 

image
数据库准备工作完成后,我们进入代码环节啦~
二、利用mongoose进行简单的数据库操作
1. 新建项目
- 新建空文件夹,命名为mongooseTest 
- 启动终端,进入该文件夹 
- 在命令行中输入npm init 初始化项目 
npm init
这里有个小问题就是项目不能以驼峰命名,所以npm init后会让你输入一个别名,我们就叫mongoosetest好了,然后一直Enter,项目创建成功。

image
- 下载依赖包 mongoose 
npm i mongoose -s
- 完成项目创建,项目结构: 

image
2. 连接数据库
在根目录下创建db.js,输入以下代码,监听connection的几个事件,如果以上操作都没错的话,那么就会监听第一个事件“connect”事件,表示连接数据库成功,在最后,我们导出mongoose对象,以供其他模块使用。
/**
 * Created by vince on 2017/7/10.
 * db.js
 */var mongoose = require('mongoose');//设置mongo存储路径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');
});//导出mongoose对象module.exports = mongoose;运行db.js,如下图所示:

image
第一步连接数据库成功啦~
3. 新建Schema与发布Model
那么什么是Schema呢?schema是mongoose里会用到的一种数据模式,可以理解为我们传统数据库中的表(table)结构的定义,简单地说,就是一个数据模板,每个schema会映射到mongodb中的一个collection,它不具备操作数据库的能力。
那什么又是Model呢?Model是由Schema发布生成的模型,具有抽象属性和行为的数据库操作对,Model可以直接操作Mongo数据库中的数据。
解释完了代码用说话,新建user.js,输入以下代码,创建一个user的schema,并且利用Schema发布一个Model,导出Model:
/**
 * Created by vince on 2017/7/10.  
 * user.js
 *///引入之前我们创建的mongose对象var mongoose = require('./db.js');//创建一个schema对象var Schema = mongoose.Schema;//创建一个schema实例var UserSchema = new Schema({    username: {type: String},    userpwd: {type: String},    userage: {type: Number},    logindate: {type: Date}
});//利用UserSchema实例,发布一个User的model并且导出module.exports = mongoose.model("User",UserSchema);4. Model创造Entity实体,对数据库操作
那Entity又是什么呢?Entity是由Model创建的实体,他的操作也会影响数据库。
- 新建insert.js,输入以下代码: 
/**
 * Created by vince on 2017/7/10.
 * insert.js
 *///引如User的Modelvar User = require('./user');//创建一个插入数据到数据库中的函数function insert() {    //用Model创建一个Entity实体,就是一个User的数据
    var user_1 = new User({        username: 'Vince Hua',        userpwd: '123456',        userage: 20,        logindate: new Date()
    });    //调用user_1的save方法,插入user_1的数据到数据库中
    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,命令行输入框得到一下结果:  - image 
- 我们再查看数据库中:  - image 
- 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
/**
 * Created by vince on 2017/7/10.
 * update.js
 *///引入User的Modelvar User = require("./user.js");function update(){    //wherestr是我们要进行操作的数据
    var wherestr = {'username' : 'Vince Hua'};    //update是我们更新的数据
    var updatestr = {'userpwd': 'hhhhhh'};
    User.update(wherestr, updatestr, function(err, res){        if (err) {            console.log("Error:" + err);
        }        else {            console.log("Update Res: " + res);
        }
    })
}
update();- 运行updata.js,操作成功,命令行输出: 

image
- 更新成功,查看数据库: 

image
- 删除数据
同样我们直接用Model操作数据库,新建remove.js,输入以下代码:
/**
 * Created by vince on 2017/7/10.
 * remove.js
 */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();- 执行代码,得到一下结果: 

image
- 查看数据库,显示数据已经被删除 

image
- 查找数据
- 查找数据之前,我们插入一下几个数据  - image 
依旧是使用Model操作数据库,新建find.js,输入以下代码:
/**
 * Created by vince on 2017/7/10.
 * find.js
 */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();- 执行代码,得到查询结果: 

image
四、总结
这里介绍的知识简单的mongoose的增删改查操作,只是方便我们第一次接触Mongo入门的小练习的Demo而已,mongoose还有其他强大的操作这里没有一一介绍,希望小伙伴们可以查看中文文档了解更多,如果你看了这篇文章觉得自己已经入门啦,那么恭喜你~
- 所有代码已经上传到GitHub,传送门: Demo代码 
作者:vince__
链接:https://www.jianshu.com/p/f22ee9735249
 
		


 随时随地看视频
随时随地看视频 
				 
				 
				 
				 
				