4.4 服务端(处理内容:动态-数据库)

新增数据库:(1)创建规则(2)获取不符合规则的错误信息
删除数据库
修改数据库
查询数据库
集合关联:规则处关联集合1和集合2,添加处添加具体id,查询为链式查询

新增数据库

1.创建集合规则
2.匹配集合规则和集合名称,如有错误输出错误
3.将req的参数插入到集合中(三种方式)

/*—————————————————创建集合,新增数据————————————————————————————*/

//1.创建集合规则,(实例对象)
const courseSchema = new mongoose.schema(
    {
        name: String,   //字段:字段类型
    }

)
//2.创建集合,(并应用规则,Course为构造函数)
//参数1:集合名称,需大写,但是实际数据库会将集合名称改为courses
//参数2:规则的实例对象
const Course = mongoose.model("Course", courseSchema)
//3.1   创建集合中的数据(文档)方式1
const course1 = new Course({
    name: "值",
})
course1.save()  //保存数据
//3.2  创建集合中的数据(文档)方式2 
Course.creat({   //构造函数集合中,creat方法第一个参数存储文档,第二个参数存储回调函数
    name: "值",
}, (err, result) => {  //回调函数第一个参数为错误信息,第二个参数为构造函数第一个参数存储文档的全部数据
course.save()  //保存数据
})
//3.3   创建集合中的数据(文档)方式3
Course.creat({   //构造函数集合中,creat方法第一个参数存储文档,第二个参数存储回调函数
    name: "值",
}).then((result) => { }).catch((err) => { })
course.save()  //保存数据
集合规则:验证失败不插入至数据库

1.插入数据库内的字段值可以设置规则

-规则方法
1六种基础类型和日期类型type:date
2必填字段required:[true,“自定义错误信息”]
3字符串最小长度minlength:[2,“自定义错误信息”]
4字符串最大长度maxlength:[2,“自定义错误信息”]
5只能传递字符串为xx的值enum:[“哈哈”,“呵呵”,“嘿嘿”]
6去除字符串两端空格trim:true
7unmber最小值min:[2,“自定义错误信息”]
8unmber最大值max:[2,“自定义错误信息”]
9设置默认值default:“默认值”
10设置默认日期type:date+default:Date.now
11自定义设置规则下方
const courseSchema = new mongoose.schema(
    {
        name: {
    1.        type: number,   //字段的类型:数字
    2.        required: [true, "自定义错误信息"],  //必填信息
    3.        minlength: [2, "自定义错误信息"],  //字符串最小长度
    4.        maxlength: [2, "自定义错误信息"], //字符串最大长度
    5.        enum: ["哈哈", "呵呵", "嘿嘿"], //只能传递字符串为xx的值
              enum: {
                values: ["1", "2"],
                message: "自定义错误信息"
            }, //只能传递字符串为xx的值
    6.        trim: true, //去除字符串两端空格
    7.        min: [2, "自定义错误信息"],  //unmber最小值
    8.        max: [2, "自定义错误信息"], //unmber最大值
    9.        default: "默认值",  //设置默认
     
    10.        //设置类型为日期,且设定默认日期             
            type: Date,
            default: Date.now,
            
    11.       //设置自定义规则                           
            type: string,
            validate: {    //自定义设置规则
                validator: (v) => {
                    //v是要插入数据库的内容,给v设置规则
                    return 布尔值
                },
                message: "自定义设置错误信息"
            }

        }
    }

)
导入数据库的字段不符合设定规则时,获取错误信息对象
Course.creat({
    name: "值",
}, (error, result) => {
    const err1 = error.errors;  //获取全部的错误信息对象
    for (var i in err1) {     //循环错误信息对象,得到每个字段的错误对象
        var 错误信息 = err1[i]["message"]     //输出错误的信息,但是不能得到是哪个字段出了问题
    }
})

删除数据库

1.删除文档

//1.查找多条数据并删除第一条
Course.findOneAndDelete({
    _id: "121"
}).then((result) => {
})
//2.查找多条数据并且全部删除
Course.deleteMany({
    _id: "121"  //如果此处是空的,则全部都会删除
}).then((result) => {
})

修改数据库

1.修改文档

//1.查找单个文档,并且更改文档内字段的值
Course.updateOne({
    _id: "121"  //利用字段查询条件,查找文档 
}, {
    _id: "121"  //修改查找出来文档内部的字段值
}).then((result) => {
})
//2.查找多个文档,并且更改多个文档内相同字段名的值

Course.updateMany({
    _id: "121"  //利用字段查询条件,查找文档 
}, {
    _id: "121"  //修改查找出来文档内部的字段值
}).then((result) => {
})

查询数据库:集合的构造函数通过点方法调用查询数据方法

1.按照条件查询多个文档
2.按照条件查询多个文档,仅显示第一个
3.条件规则为区间
4.条件规则为模糊查询
5.模糊查询:查找所有的字段,返回值是字段所在的文档 ?
6.对查询出来的数据进行排序
7.分页功能

//1.查询方式多个文档
Course.find({
//如果为空是查询所有文档(所有字段),如果加入字段判断条件,查询出全部符合条件文档
    _id: "121",

}).then((result) => {
    // result 查询的结果
})
//2.查询方式单个文档
Course.findone({
    //如果为空是查询所有文档(所有字段),如果加入字段判断条件,查询出第一个符合条件文档
    _id: "121",

}).then((result) => {
    // result 查询的结果
})
// 3.设置匹配字段的规则为区间
Course.find({
    _id: { $gt: 20, $lt: 50 },   //搜索id字段在20-50区间,返回值是文档

}).then((result) => {
})
//4.设置匹配字段的规则为包含
Course.find({
    _id: { $in: ["敲代码"] },   //搜索id字段包含"敲代码",返回值是文档

}).then((result) => {
})
//5.设置条件查找,返回值为文档和当前文档的所有字段,在返回字段缩小范围
Course.find({
}).select("字段1 字段2")  //字段直接用空格隔开
    .then((result) => {
    })
//6.查询出来的字段的值(数据)进行排序
Course.sort({
}).select("字段1 字段2")  //字段直接用空格隔开
    .then((result) => {
    })
//7.分页功能:查询文档时,跳过一些文档,仅显示一些文档
Course.find({
}).skio(2)    //跳过前两个文档
    .limit(3)  //只显示3个文档
    .then((result) => {
    })

集合关联

1.集合关联:举例:银行账户信息需要帐套信息,只需要关联帐套的id即可
2.总结:(1)创建集合2规则,将集合1以字段方式关联进规则,(2)插入集合2文档数据时,选择以字段存储的集合1的文档id;

//1.创建集合1规则,并且创建集合1
const jihe1 = new mongoose.schema(
    {
        name: String,   //字段:字段类型
    }

)
const jihe11 = mongoose.model("Course", jihe1)
//3.创建集合2规则,以字段方式关联集合1,并且创建集合2

const jihe2 = new mongoose.schema(
    {
        name: String,   //字段:字段类型
        lzy1: {
          type: mongoose.Schema.Types.ObjectId,    //固定写法:类型是集合1的 id类型
          ref: "jihe11"   //关联集合  jihe11
     }
    }
)
const jihe22 = mongoose.model("Course", jihe2)
//4.集合2插入一条文档时,确定关联字段文档的具体ID值

const jihe22 = mongoose.model("Course", jihe2)      //创建集合2集合
jihe22.creat({ lzy1: "具体的id地址" })      //向集合2插入数据,并且将关联的集合11中的具体id插入至集合22
//5.查询集合2文档时,链式查询集合1文档;

jihe22.find().populate("lzy1").then((result) => { })   //查询jihe2中的全部文档,且链式查询lzy1字段中存储的其他文档
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值