mongoose的基本使用

一、介绍

Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具。Mongoose

是 NodeJS 的驱动,不能作为其他语言的驱动。

Mongoose 有两个特点

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

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

二、基本使用

// 1. 安装 npm install mongoose --save
// 2. 引入并连接数据库
const mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1:27017/demo");
// 如果有账户密码
//mongoose.connect("mongodb://user:[email protected]:27017/demo");
// userNewUrlParser这个属性会是被验证用户所需的db,
// mongoose.connect("",{userNewUrlParser:true});
// 3. 定义schema
/*数据库中的 Schema,为数据库对象的集合。
schema 是 mongoose 里会用到的一种数据模式, 
可以理解为表结构的定义;
每个 schema 会映射到 mongodb 中的一个 collection,
它不具备 操作数据库的能力*/
let StudentSchema = mongoose.Schema({
    stuid: String,
    stuname: String,
    stuage: Number,
    stusex: String
    // stusex :{type: String,default:1} // 可以指定默认参数
});
// 4.创建数据模型 
//mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema,参数 3:数据库集合名称)
let Student = mongoose.model('Student',StudentSchema,"student");

//5. 增加数据
// 实例化模型
// let s = new Student({
//     stuid: "20210001",
//     stuname: "张三",
//     stuage: 23,
//     stusex: "男"
// });
// s.save(function(err){
//     if(err){
//         console.log(err);
//         return;
//     }
//     console.log("增加数据成功");
// });
// 6.修改数据
// Student.updateOne(
//     {"stuid":"20210001"},  // 条件
//     {"stuname":"小明"} ,  // 更改的内容
//     (err)=>{
//         if(err){
//             console.log(err);
//             return;
//         }
//         console.log("修改数据成功");
//     }
// );
//7 .查找数据
// Student.find(
//     {}, //条件
//     (err,result)=>{
//         if(err){
//             console.log(err);
//             return;
//         }
//         console.log(result);
//     }
// );
// 8.删除数据
Student.deleteOne(
    {"stuid" : "20210001"}, // 条件
    (err)=>{
        if(err){
            console.log(err);
            return;
        }
        console.log("删除数据成功");
    }
);

三、修饰符

1.预定义修饰符

var UserSchema=mongoose.Schema(
    { 
        name:{ 
            type:String, 
            trim:true  // 去除左右空格
        }, 
        age:Number, 
        status:{ type:Number, default:1 } })

2.自定义修饰符get和set

set可以用,get不建议使用

set(建议使用) 修饰符在增加数据的 时候对数据进行格式化

var NewsSchema=mongoose.Schema({ 
    title:"string", 
    author:String, 
    pic:String, 
    redirect:{ 
        type:String, 
        // 对url进行处理,没有http的加上去
        set(url){ 
            if(!url) 
                return url; 
            if(url.indexOf('http://')!=0 && url.indexOf('https://')!=0){
                url = 'http://' + url; }return url; 
        } 
    }, 
    content:String, 
    status:{ type:Number, default:1 } 
})

3.索引

var DeviceSchema = new mongoose.Schema({ 
    sn: { 
        type: Number, // 唯一索引 
        unique: true 
    },
    name: { 
        type: String, // 普通索引 
        index: true 
    } 
});

4.扩展CRUD方法

var mongoose=require('./db.js');
var UserSchema=mongoose.Schema({ 
    name:{ 
        type:String 
    },
    age:Number,
    status:{ 
        type:Number, 
        default:1 
    } 
})
// 静态方法 
UserSchema.statics.findByUid=function(uid,cb){ 
    this.find(
        {"_id":uid},
        function(err,docs){ 
            cb(err,docs) 
        })
}
// 实例方法 
UserSchema.methods.print = function(){ 
    console.log('这是一个实例方法'); 
    console.log(this); 
};
module.exports=mongoose.model('User',UserSchema,'user');

四、数据校验

1.校验参数

required : 表示这个数据必须传入

max: 用于 Number 类型数据,最大值

min: 用于 Number 类型数据,最小值

enum:枚举类型,要求数据必须满足枚举值

enum: [‘0’, ‘1’, ‘2’]

match:增加的数据必须符合 match(正则)的规则

maxlength:最大值

minlength:最小值

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, 
        maxlength:20,
        minlength:10 } 
    });

2.自定义验证器

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; 
        } 
    } 
});

五、aggregate聚合管道

管道操作符 Description

$project 增加、删除、重命名字段

$match 条件匹配。只满足条件的文档才能进入下 一阶段

$limit 限制结果的数量

$skip 跳过文档的数量

$sort 条件排序。

$group 条件组合结果 统计

$lookup $lookup 操作符 用以引入其它集合的数据 (表关联查询)

SQL NOSQL 对比***

WHERE $match

GROUP BY $group

HAVING $match

SELECT $project

ORDER BY $sort

LIMIT $limit

SUM() $sum

COUNT() $sum

join $lookup

管道表达式***

管道操作符作为“键”,所对应的“值”叫做管道表达式。

例如{KaTeX parse error: Expected 'EOF', got '}' at position 19: …ch:{status:"A"}}̲,match 称为管道操作符,而 status:"A"称为管道表达式,是管道操作符的操作数(Operand)。

每个管道表达式是一个文档结构,它是由字段名、字段值、和一些表达式操作符组成的。

常用表达式操作符 Description

$addToSet 将文档指定字段的值去重

$max 文档指定字段的最大值

$min 文档指定字段的最小值

$sum 文档指定字段求和

$avg 文档指定字段求平均

$gt 大于给定值

$lt 小于给定值

$eq 等于给定值

你可能感兴趣的:(总结,mongodb,javascript,数据库)