创建集合
- 设定集合规则
1
2
3
4
5const courseSchema = new mongoose.Schema({
name: String,
author: String,
isPublished: Boolean
}) - 创建集合并运用规则
1
const Course = mongoose.model('Course', courseSchema)
创建文档(向集合中插入数据)
- 创建集合实例
1
2
3
4
5
6const course = new Course({
name: 'Node.js course',
author: 'zy',
tags: ['node'],
isPublished: true
}) - 保存到数据库
1
course.save()
导入外部文件(先将mongodb安装目录下的bin配置在环境变量中)
1 | mongoimport -d 数据库名称 -c 集合名称 --file 要导入的外部数据文件 |
查询文档(返回结果都是集合,方法结束后都是一个promise对象,可以接then)
- 返回所有文档
1
find()
- 返回一条文档,默认返回当前集合中的第一条文档
1
findOne()
- 匹配范围
1
User.find({age: {$gt: 20, $lt: 40}}).then(res => {console.log(res)})
- 匹配包含
1
User.find({hobbies: {$in: ['旅行']}}).then(res => {console.log(res)})
- 选择要查询的字段
1
User.find.select('name email').then(res => {console.log(res)})
- 选择不要查询的字段
1
User.find.select('-name -email').then(res => {console.log(res)})
- 根据某个字段排序(升序)
1
User.find.sort('age').then(res => {console.log(res)})
- 根据某个字段排序(降序)
1
User.find.sort('-age').then(res => {console.log(res)})
- skip跳过多少条数据 limit限制查询数量
1
User.find.skip(2).limit(6).then(res => {console.log(res)})
删除文档
- 删除一条文档(如果查询条件匹配了多个文档,删除匹配的第一条文档)
1
User.findOneAndDelete({id: 1}).then(res => {console.log(res)}) // 返回的是删除的文档
- 删除多条文档(删除条件为{}时,删除User集合中的所有文档)
1
User.deleteMany({id: 1}).then(res => {console.log(res)}) // 返回的是删除的一个结果对象,包括删除的条数n,删除成功或失败的状态ok
更新文档
- 更新单个
1
User.updateOne({name: '李四'}, {name: '张三'}).then(res => {console.log(res)}) // 返回的是是否修改成功的信息
- 更新多个
1
User.updateMany({}, {age: 32}).then(res => {console.log(res)}) // 返回的是是否修改成功的信息,包括被执行更新的条数n,更新的条数nModified,成功或失败的状态ok
验证规则
- 验证规则
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45const postSchema = new mongoose.Schema({
title: {
type: String,
// 必选字段
required: [true, '自定义错误信息'],
// 字符串最小长度
minlength: [2, '自定义错误信息'],
// 字符串最大长度
maxlength: [6, '自定义错误信息'],
// 去除字符串两边的空格
trim: true
},
age: {
type: Number,
// 数值的最小值
min: [18, '自定义错误信息'],
// 数值的最大值
max: [66, '自定义错误信息']
},
publishDate: {
type: Date,
// 默认值
default: Date.now
},
category: {
type: String,
// 枚举 列举出当前字段可以拥有的值
enum: {
values: ['html', 'css', 'javascript', 'node.js'],
message: '自定义错误信息'
}
},
author: {
type: String,
// 自定义验证规则
validate: {
validator: v => {
// 返回布尔值 v为要验证的值
return v && v.length > 4
},
// 自定义错误信息
message: '自定义错误信息'
}
}
})
集合关联
- 用户集合
1
2
3
4
5const User = mongoose.model('User', new mongoose.Schema({
name: {
type: String
}
})) - 文章集合
1
2
3
4
5
6
7
8
9const Post = mongoose.model('Post', new mongoose.Schema({
title: {
type: String
},
// 使用ID将文章作者与作者集合进行关联,ID为compass自动生成的
author: {
type: mongoose.Schema.Types.ObjectId, ref: 'User'
}
})) - 联合查询
1
2
3Post.find()
.populate('author')
.then((err, result) => {console.log(result)})
一个正在成长的前端小白~