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:123456@127.0.0.1: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 等于给定值

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于基本的增删改查操作,使用mongoose可以按照以下步骤进行: 1. 定义数据模式Schema:在定义数据模式时使用mongoose.Schema来创建一个新的模式对象。可以通过指定字段名称和类型来定义模式的属性,例如: ```javascript const mongoose = require("mongoose"); const Schema = mongoose.Schema; const NewsSchema = new Schema({ name: {type: String}, age: {type: Number}, sex: {type: String, required: [true, '请选择性别']} }); ``` 2. 定义数据模型Model:通过mongoose.model来创建一个新的模型对象,参数1为模型的名称,参数2为使用的模式对象,参数3为集合名称。例如: ```javascript const UserModel = mongoose.model('User', NewsSchema, 'user'); ``` 3. 增加数据:使用模型对象的create方法来创建一个新的文档,并将其保存到数据库中。例如: ```javascript UserModel.create({name: 'John', age: 25, sex: 'Male'}, (err, doc) => { if(err) { console.log(err); } else { console.log(doc); } }); ``` 4. 查询数据:使用模型对象的find方法来查询符合条件的文档。例如: ```javascript UserModel.find({name: 'John'}, (err, docs) => { if(err) { console.log(err); } else { console.log(docs); } }); ``` 5. 更新数据:使用模型对象的updateOne或updateMany方法来更新符合条件的文档。例如: ```javascript UserModel.updateOne({name: 'John'}, {age: 30}, (err, result) => { if (err) { console.log(err); } else { console.log(result); } }); ``` 6. 删除数据:使用模型对象的deleteOne或deleteMany方法来删除符合条件的文档。例如: ```javascript UserModel.deleteOne({name: 'John'}, (err) => { if (err) { console.log(err); } else { console.log('删除成功'); } }); ``` 以上是使用mongoose进行基本增删改查的步骤。可以根据具体的需求和条件进行相应的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [mongoose实现增删改查](https://blog.csdn.net/qq_44747461/article/details/121178662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [eggjs实战(5)——eggjs+mongoose(egg-mongoose)增删改查技巧](https://blog.csdn.net/zjsj_lize/article/details/120938407)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值