当前位置: 首页 > 工具软件 > wang crud > 使用案例 >

Eggjs笔记:Mongoose的CRUD,默认参数,模块化

易瀚漠
2023-12-01

关于Mongoose

  • Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具
  • Mongoose是 NodeJS 的驱动,不能作为其他语言的驱动
  • 是nodejs操作数据库的一个模块,更安全,更方便

特点

  • 通过关系型数据库的思想来设计非关系型数据库
  • 基于 mongodb 驱动,简化操作

Mongoose的安装以及使用

  • 官网:https://mongoosejs.com/
  • 安装:$npm i mongoose --save
  • 第一步和第二步:引入 mongoose 并连接数据库
    const mongoose = require('mongoose');
    mongoose.connect('mongodb://localhost/test');
    // 如果有账户密码需要采用下面的连接方式:
    mongoose.connect('mongodb://eggadmin:123456@localhost:27017/eggcms');
    
  • 第三步:定义 Schema
    • 数据库中的 Schema,为数据库对象的集合
    • schema 是 mongoose 里会用到的一种数据模式
    • 可以理解为表结构的定义;每个 schema 会映射到 mongodb 中的一个 collection
    • 它不具备操作数据库的能力
    var UserSchema=mongoose.Schema({name: String, age:Number, status:'number' })
    
  • 第四步:创建数据模型
    • 定义好了 Schema,接下就是生成 Model
    • model 是由 schema 生成的模型,可以对数据库的操作
    • 注意:mongoose.model 里面可以传入两个参数也可以传入三个参数
    • mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema 参数 3:数据库集合名称)
    • 如果传入2个参数的话:这个模型会和模型名称相同的复数的数据库建立连接:如通过下面方法创建模型,那么这个模型将会操作 users 这个集合
      var User=mongoose.model('User', UserSchema); // 此时会找users表
      var User=mongoose.model('User', UserSchema, 'user'); // 此时会找user表
      
    • 如果传入3个参数的话: 模型默认操作第三个参数定义的集合名称
  • 查找数据
    User.find({},function(err,docs){
        if(err){
            console.log(err);
            return;
        }
        console.log(docs);
    })
    
  • 增加数据
    var u=new User({
        //实例化模型 传入增加的数据
        name:'lisi2222333', age:20, status:true
    })
    u.save();
    
  • 修改数据
    // 一般通过id来获取数据,确保唯一性,此处只做演示
    User.updateOne({ name: 'lisi2222' }, { name: '哈哈哈' }, function(err, res) {
        if(err){
            console.log(err);
            return;
        }
        console.log('成功')
    });
    
  • 删除数据
    User.deleteOne({ _id: '5b72ada84e284f0acc8d318a' }, function (err) {
        if (err) {
            console.log(err);
            return;
        }
        // deleted at most one tank document
        console.log('成功');
    });
    
  • 保存成功查找
    var u=new User({
        name:'lisi2222333', age:20, status:true //类型转换
    })
    u.save(function(err,docs){
        if(err){
            console.log(err);
            return;
        }
        //console.log(docs);
        User.find({},function(err,docs){
            if(err){
                console.log(err);
                return;
            }
            console.log(docs);
        })
    });
    

Mongoose参数和默认参数

  • 数据库连接
    const mongoose = require('mongoose');
    mongoose.connect('mongodb://eggadmin:123456@localhost:27017/eggcms', {useNewUrlParser: true}, function(err) {
        if(err) {
            console.log(err);
            return;
        }
        console.log('conc suc');
    });
    
    • {useNewUrlParser: true} 参数用于识别用户所需db,未升级前无需指定,升级后需指定, 是 MongoDB V3.1.0 之后新加的API
    • 第三个回调函数参数用于监听连接的状态
  • 定义数据库表映射
    // 定义的Schema一定要和数据库表对应起来,如果不对应起来, 那么不会执行错误的信息,这里给status指定默认参数
    const UserSchema=mongoose.Schema({name: String, age:Number, status:{type: Number, default: 1}})
    const User=mongoose.model('User', UserSchema, 'user'); // 此时会找user表
    // 这里没写status属性,因为有默认参数
    var user = new User({
        name:'lisi2222333', age:20
    })
    

Mongoose 模块化

  • 在eggjs中模块化Mongoose使用

  • 在app/model中,编写db.js

    'use strict';
    
    const mongoose = require('mongoose');
    mongoose.connect('mongodb://eggadmin:123456@localhost:27017/eggcms', { useNewUrlParser: true }, function(err) {
    if (err) {
        console.log(err);
        return;
    }
    console.log('conc suc');
    });
    module.exports = mongoose;
    
  • 在app/model中,添加user.js数据模型

    // 配置schema和数据模型
    'use strict';
    
    const mongoose = require('./db.js');
    const UserSchema = mongoose.Schema({
        name: String,
        age: Number,
        status: {
            type: Number,
            default: 1,
        }});
    
    module.exports = mongoose.model('User', UserSchema, 'user');
    
  • 这样封装好之后,以后要用user,直接导入user模块即可!

  • 如果有多个模块,比如news.js也可以这样封装

  • 另外Mongoose底层类似单例模式,不会重复多次连接

 类似资料: