「全栈初探」- Mongoose的简单使用

1、准备工做

1. 启动mongo数据库

关于下载安装启动数据库我这里就不作过多解释,谷歌下会有不少教程,启动成功后的命令窗以下所示:git

image

2. 启用可视化Mongo工具

这里咱们用的是Robo 3T,为何要用可视化工具呢,由于小白对于命令行仍是很陌生的,在命令行中查看数据库的内容有些不直观,这个可视化工具的安装包谷歌一下就阔以找到啦~github

  1. 启动可视化工具mongodb

  2. 链接数据库(前提是已经启动了mongo数据库)数据库

image

  1. 新建数据库mongoosetestnpm

image
image

  1. 建立成功mongoose

image

数据库准备工做完成后,咱们进入代码环节啦~函数

2、利用mongoose进行简单的数据库操做

1. 新建项目

  1. 新建空文件夹,命名为mongooseTest工具

  2. 启动终端,进入该文件夹ui

  3. 在命令行中输入npm init 初始化项目spa

npm init

这里有个小问题就是项目不能以驼峰命名,因此npm init后会让你输入一个别名,咱们就叫mongoosetest好了,而后一直Enter,项目建立成功。
image

  1. 下载依赖包 mongoose

npm i mongoose -s
  1. 完成项目建立,项目结构:

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的Model
var 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更具操做性。

3、mongoose的其余一些 “骚操做”

  • 更新数据库

    这里咱们是直接用Model来操做数据库,新建update.js

/**
 * Created by vince on 2017/7/10.
 * update.js
 */
//引入User的Model
var 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

4、总结

这里介绍的知识简单的mongoose的增删改查操做,只是方便咱们第一次接触Mongo入门的小练习的Demo而已,mongoose还有其余强大的操做这里没有一一介绍,但愿小伙伴们能够查看中文文档了解更多,若是你看了这篇文章以为本身已经入门啦,那么恭喜你~

  • 全部代码已经上传到GitHub,传送门: Demo代码

  • nice to meet you ~ ,给个小star鼓励下?

相关文章
相关标签/搜索