夫天地者,万物之逆旅;光阴者,百代之过客。而浮生若梦,为欢几何?
Mongoose的基本用法

前言

在前面一篇里已经学习并记录了Node.js操作MongoDB的基本用法,本篇将学习mongoose的基本使用。Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具。Mongoose是 NodeJS 的驱动,不能作为其他语言的驱动。它有如下两个特点:

1、通过关系型数据库的思想来设计非关系型数据库

2、基于 mongodb 驱动,简化操作

安装及使用

首先执行安装命令

npm i mongoose --save / cnpm i mongoose --save

安装成功后,直接上代码演示:

//1、引入mongoose
const mongoose = require('mongoose');
//2、建立连接
mongoose.connect('mongodb://127.0.0.1:27017/MyBlog');
//3、定义一个Schema   Schema里面的对象和数据库表里面的字段需要一一对应
//schema 是 mongoose 里会用到的一种数据模式,可以理解为表结构的定义;
//每个 schema 会映射到 mongodb 中的一个 collection,它不具备操作数据库的能力
var UserSchema = mongoose.Schema({
    name:String,
    age:Number,
    status:Number
});
//4、定义数据库模型  操作数据库
//传入两个参数:默认会操作 users表(集合)
//var User=mongoose.model('User',UserSchema);
//传入三个参数:默认会操作第三个参数配置的表  user表(集合)
var User = mongoose.model('User',UserSchema,'user');
//增加
var userEntity = new User({
    name:'一蓑烟雨',
    age:18,
    status:1
});
userEntity.save(function(err){
    if(err){
        console.log(err);
        return;
    }
    console.log('增加成功');
});
//查询
User.find({},function(err,doc){
    if(err){
        console.log(err);
        return;
    }
    console.log(doc);
})

执行结果如下:

预定义模式修饰符

mongoose 提供的预定义模式修饰符,可以对我们增加的数据进行一些格式化,如:lowercase、uppercase 、trim等。

同时,还可以通过 set(建议使用)和get 自定义修饰符在增加数据的时候对数据进行格式化。具体如下所示:

//焦点轮播图的schema
var FocusSchema=mongoose.Schema({
    title:{
        type:String,
        trim:true    //定义 mongoose模式修饰符 去掉空格
    },   
    pic:String,    
    redirect:{
        type:String,
        set(parmas){   
            //如果跳转链接中没有http://或https://的前缀,则手动添加并保存到db中
            if(!parmas){
                return ''
            }else{
               if(parmas.indexOf('http://')!=0 && parmas.indexOf('https://')!=0){
                    return 'http://'+parmas;
               }
                return parmas
            } 
        }
    },
    status:{
        type:Number,
        default:1
    }
})

mongoose内置的方法

具体可以参考:https://mongoosejs.com/docs/queries.html 中的介绍

扩展 Mongoose 的CRUD 方法

首先我们将数据库中的user表模块化,即新建一个user.js,将UserSchema定义在此文件中,并通过static静态方法,扩展一个findByName的方法,然后暴露给外部调用。

/model/user.js

var UserSchema=mongoose.Schema({
    name:{
        type:String
    },
    age:Number,
    status:{
        type:Number,
        default:1
    }
})
//静态方法 扩展根据name查询user信息的方法
UserSchema.statics.findByName=function(name,cb){
    //通过 find方法获取user的数据 this 关键字获取当前的model
    this.find({"name":name},function(err,docs){
        cb(err,docs)
    })
};
module.exports=mongoose.model('User',UserSchema,'user');

外部调用的代码就可以如下写法:

var UserModel = require('./model/user.js');
UserModel.findByName('一蓑烟雨',function (err, docs) {
    if(err){
        console.log(err);
        return;
    }
    console.log(docs)
});

执行的结果如下:

数据校验

下面列出的一些数据校验均来源于学习笔记(非原创),以供备忘:

var UserSchema = new mongoose.Schema({
    name:{
        type:String, 
        required: true, 
    },
    age: {
        type: Number, // 是否必须的校验器
        required: true, // 数字类型的最大值校验器
        max: 120, // 数字类型的最小值校验器
        min: 0
    },
    status: {
        type: String, // 设置字符串的可选值
        enum: ['0', '1', '2']
    },
    phone:{
        type:Number, match: /^\d{11}$/
    },
    desc: {
        type: String, // 自定义的验证器,如果通过验证返回 true,没有通过则返回 false
        validate: function(desc) {
            return desc.length >= 10;
        }
    }
});

总结

本文代码示例较多,都是mongoose的一些基础的用法,方便以后使用查阅~~

作者:一蓑烟雨

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

0

支持

0

反对

posted @2020-3-10  拜读(157)

评论列表

评论内容:



喜欢请打赏

支付宝 微信

请放心支付