视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
node使用Mongoose类库实现简单的增删改查
2020-11-27 22:04:19 责编:小采
文档


Mongoose是在nodejs环境中对MongoDB数据库操作的封装,一种对象模型工具,可以将数据库中的数据转换为javascript对象供我们使用。

Mongoose安装

npm install mongoose

安装成功后,我们就可以使用 require('mongoose')来使用了;

下面是链接本地数据库 mongoosedb,代码如下:

var mongoose = require('mongoose');
var DB_URL = 'mongodb://localhost:27017/dataDb';

/* 链接 */
mongoose.connect(DB_URL);

/* 链接成功 */
mongoose.connection.on('connected', function() {
 console.log('Mongoose connection open to ' + DB_URL);
});

// 链接异常
mongoose.connection.on('error', function(err) {
 console.log('Mongoose connection error:' + err);
});

// 链接断开

mongoose.connection.on('disconnected', function() {
 console.log('Mongoose connection disconnected');
});

如下图所示

从如上代码,监听了几个事件,并且执行触发了connected事件,这表示连接成功。

2. Schema介绍

它是一种以文件形式存储的数据库模型骨架,不具备对数据库操作的能力,仅仅只是数据库在程序片段中的一种表现,可以理解为表结构。

那么如何去定义一个Schema呢?请看如下代码:

var mongoose = require('mongoose');
var TestSchema = new mongoose.Schema({
 name: { type: String }, // 属性name,类型为String
 age: { type: Number, default: 30 }, // 属性age,类型为Number,默认值为30
 time: { type: Date, default: '当前时间' }
});

如上在我们的TestSchema中每个key在我们的文件将被转换为相关的SchemaType定义的一个属性。允许使用的SchemaTypes有如下类型:

  • String
  • Number
  • Date
  • Buffer
  • Boolean
  • Mixed
  • ObjectId
  • Array
  • 如果我们在如上编写完成后,我们需要添加额外的键的话,我们可以使用Schema中的add方法.

    3. 创建一个模型

    我们上面定义了Schema,我们需要将我们的TestSchema转成我们可以使用的模型,模型具有对数据库操作的能力。
    我们可以通过 mongoose.model(modelName, schema);

    先来结合schema和创建一个模型来简单的看一个demo,如下代码:

    var mongoose = require('mongoose');
    // schema定义
    var TestSchema = new mongoose.Schema({
     name: { type: String },
     age: { type: String },
     sex: { type: String }
    });
    
    // 创建model
    var TestModel = mongoose.model('test1', TestSchema);
    
    // 初始化数据 
    var TestInt = new TestModel({
     name: 'kongzhi',
     age: '30',
     sex: 'girl'
    });
    
    console.log(TestInt.name); // kongzhi
    console.log(TestInt.age); // 30
    console.log(TestInt.sex); // girl

    下面我们来简单的使用上面定义的内容,来做个简单的数据库增删改查的操作。

    1. 在项目中的根目录下新建一个db.js, 代码如下:

    var mongoose = require('mongoose');
    var DB_URL = 'mongodb://localhost:27017/dataDb';
    
    /* 链接 */
    mongoose.connect(DB_URL);
    
    /* 链接成功 */
    mongoose.connection.on('connected', function() {
     console.log('Mongoose connection open to ' + DB_URL);
    });
    
    // 链接异常
    mongoose.connection.on('error', function(err) {
     console.log('Mongoose connection error:' + err);
    });
    
    // 链接断开
    
    mongoose.connection.on('disconnected', function() {
     console.log('Mongoose connection disconnected');
    });
    
    module.exports = mongoose;

    2. 下面我们新建一个user的Schema,命名为user.js, 它有如下属性,如下代码:

    /*
     定义一个user的Schema
    */
    var mongoose = require('./db.js');
    var Schema = mongoose.Schema;
    
    var UserSchema = new Schema({
     username: { type: String }, // 用户名
     password: { type: String }, // 密码
     age: { type: Number }, // 年龄
    });
    
    /* model 是由schema生成的模型,具有对数据库操作的能力 */
    
    module.exports = mongoose.model('User', UserSchema);

    3. 数据库操作,我们新建一个文件叫 app.js

    3.1 插入数据(Model.save([fn])),代码如下:

    var User = require('./user.js');
    // 插入数据
    
    var user = new User({
     username: 'kongzhi0707',
     password: '123456',
     age: 30
    });
    
    user.save(function(err, res) {
     if (err) {
     console.log(err);
     } else {
     console.log(res);
     }
    });

    然后在命令行中运行app.js ,可以看到如下:

    然后我们再到本地数据库中查看数据,可以看到新增一条数据,如下图所示

    从数据库中可以看到插入数据成功了;

    3.2 更新数据(Model.update(conditions, doc, [options], [callback]))

    conditions: 更新的条件,该值是一个对象。
    doc: 需要更新的内容,该值也是一个对象。
    options: 可选参数,它有如下属性:
    safe :(布尔型)安全模式(默认为架构中设置的值(true))
    upsert :(boolean)如果不匹配,是否创建文档(false)
    multi :(boolean)是否应该更新多个文档(false)
    runValidators:如果为true,则在此命令上运行更新验证程序。更新验证器根据模型的模式验证更新操作。
    strict:(布尔)覆盖strict此更新的选项
    overwrite: (布尔)禁用只更新模式,允许您覆盖文档(false)
    callback: 回调函数

    如下代码执行更新:

    var User = require('./user.js');
    
    // 更新数据 
    
    function update() {
     // 更新数据的条件查询
     var wherestr = {'username': 'kongzhi0707'};
    
     // 执行更新数据
     var updatestr = {'password': 'abcdef'};
    
     User.update(wherestr, updatestr, function(err, res) {
     if (err) {
     console.log(err);
     } else {
     console.log(res);
     }
     });
    }
    // 调用更新函数
    update();

    运行app.js 后,如下图所示:

    继续查看数据库,可以看到password字段被更新了,如下图所示:

    3.3 findByIdAndUpdate(id, [update], [options], [callback]);

    根据id进行更新;此id就是数据库中自动生成的id;如下代码,

    var User = require('./user.js');
    
    // 更新数据 
    
    function update() {
     // 更新数据的条件查询
     var id = '5b3a4941ca11752732fee772';
    
     // 执行更新数据
     var updatestr = {'password': 'vvvvv'};
    
     User.findByIdAndUpdate(id, updatestr, function(err, res) {
     if (err) {
     console.log(err);
     } else {
     console.log(res);
     }
     });
    }
    // 调用更新函数
    update();

    如下图数据库显示如下:

    3.4 删除 Model.remove(conditions, [callback])

    代码如下:

    var User = require('./user.js');
    
    function del() {
     // 删除数据的条件
     var wherestr = {'username': 'kongzhi0707'};
    
     User.remove(wherestr, function(err, res) {
     if (err) {
     console.log(err);
     } else {
     console.log(res);
     }
     });
    }
    // 调用函数
    del();

    到数据库中查看数据,可以看到没有这条数据了;

    3.5 条件查询 Model.find(conditions, [fields], [options], [callback]);

    如下代码所示:

    var User = require('./user.js');
    function find() {
     // 删除数据的条件
     var wherestr = {'userName': '龙恩0707'};
    
     User.find(wherestr, function(err, res) {
     if (err) {
     console.log(err);
     } else {
     console.log(res);
     }
     });
    }
    // 调用函数
    find();

    执行后,如下所示:

    3.6 数量查询 Model.count(conditions, [callback])

    var User = require('./user.js');
    
    function getCountByConditions() {
    
     User.count({}, function(err, res) {
     if (err) {
     console.log(err);
     } else {
     console.log(res); // 会
    输出数据库数据的数量 } }); } // 调用函数 getCountByConditions();

    下载本文
    显示全文
    专题