zoukankan      html  css  js  c++  java
  • 使用Mongoose类库实现简单的增删改查

    使用Mongoose类库实现简单的增删改查

    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();
  • 相关阅读:
    Mysql(三) Mysq慢查询日志
    Mysql(二) Mysql错误日志
    Mysql(一) Mysql二进制日志
    HA(二)Heartbeat实现LVS集群DR模式下Director高可用
    HA(一)高可用集群原理
    LVS(五)LVS集群RealServer高可用健康监测
    LVS(四)LVS集群DR模式
    LVS(三)LVS集群NAT模式
    LVS(二)LVS集群中实现的三种负载均衡技术
    Cocos2d-JS实现的打飞机
  • 原文地址:https://www.cnblogs.com/tugenhua0707/p/9256605.html
Copyright © 2011-2022 走看看