新增数据库:(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 |
7 | unmber最小值 | min:[2,“自定义错误信息”] |
8 | unmber最大值 | 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字段中存储的其他文档