MongoDB数据库
- Mongoose第三方包
- 数据库相关概念
- 连接数据库
- 创建集合
- 插入文档
- 创建文档
- mongoDB数据库导入数据
- MongoDB增删改查操作
- 查询文档
- 删除文档
- 更新文档
- MongoDB增删改查操作
- 集合关联
Mongoose第三方包
使用Node.js操作MongoDB数据库需要依赖Node.js第三方包mongoose
使用npm install mongoose
命令下载
数据库相关概念
术语 | 解释说明 |
database | 数据库,mongoDB数据库软件中可以建立多个数据库 |
collection | 集合,一组数据的集合,可以理解为JavaScript中的数组,类似于表 |
document | 文档,一条具体的数据,可以理解为JavaScript中的对象 ,类似于表内的一条记录 |
field | 字段,文档中的属性名称,可以理解为JavaScript中的对象属性 |
连接数据库
var mongoose=require('mongoose');
mongoose.connect('mongodb://localhost/demonstration',{ useNewUrlParser: true })
.then(()=>console.log('连接成功'))
.catch(()=>console.log('连接失败'));
创建集合
创建一个学生集合,属性为[学号,名字,年龄,是否毕业]
//创建规则
var studentSchema=new mongoose.Schema({
sno:String,
sname:String,
sage:Number,
hobbies:[String],
isGraduation:Boolean
});
//创建集合并运用规则
//在mongoDB数据库内Student集合会自动变为students
var Student=mongoose.model('Student',studentSchema);
插入文档
创建文档
- 通过
save()
方法
//实例集合并使用.save()方法
var student =new Student({
sno:'2018001',
sname:'小明',
sage:20,
hobbies:['读书','跑步'],
isGraduation:false
});
student.save();
- 通过
create()
方法
返回的是一个promise
对象
Student.create({
sno:'2018001',
sname:'小明',
sage:20,
hobbies:['读书','跑步'],
isGraduation:false
}).then(()=>console.log('插入成功'))
.catch(()=>console.log('插入失败'));
mongoDB数据库导入数据
找到mongodb数据库工具的安装目录(即找bin目录下的mongoimport.exe文件是否存在,未找到的可取官网下载)
将安装目录下的bin目录放置在系统环境变量Path中。
命令行命令:
mongoimport –d 数据库名称 –c 集合名称 –-file 要导入的数据文件
mongoimport -d demonstration -c students --file ./student.json
MongoDB增删改查操作
查询文档
用find()
返回值是一个集合
用findOne()
返回值是一个对象
- 查询集合中所有文档
//两个语句都可以
Student.find().then(result=>console.log(result));
Student.find({}).then(result=>console.log(result));
- 根据条件查找文档
查询年纪为18的文档
Student.find({sage:18}).then(result=>console.log(result));
- 查出结果为多个文档中的第一个
Student.findOne({sage:18}).then(result=>console.log(result));
- 匹配大于 小于
查询年纪大于18,小于20的文档
Student.find({sage:{$gt:18,$lt:20}}).then(result=>console.log(result));
- 匹配包含
查询爱好内有跑步的记录
Student.find({hobbies:{$in:['跑步']}}).then(result=>console.log(result));
- 选择要查询的字段
只显示sno sage 不显示_id 在前面加-
Student.find().select('sno sage -_id').then(result => console.log(result))
- 将数据按照年龄进行排序 默认
升序
想要降序
在前面加-
Student.find().sort('sage').then(result => console.log(result))
- skip 跳过多少条数据 limit 限制查询数量
Student.find().skip(1).limit(1).then(result => console.log(result))
删除文档
- 删除单个
Student.findOneAndDelete({}).then(result => console.log(result))
- 删除多个
{}
匹配所有
Student.deleteMany({}).then(result => console.log(result))
更新文档
- 更新单个
Student.updateOne({sage:10},{sage:21}).then(result => console.log(result))
- 更新多个
Student.updateMany({sage:21},{sage:30}).then(result => console.log(result))
MongoDB增删改查操作
用{}
包括
- type:属性的类型
- required: true 必传字段
或者
required:[true,’ 填要输出的错误信息 '] - minlength:3 字符串最小长度
- maxlength: 20 字符串最大长度
- min: 2 数值最小为2
- max: 100 数值最大为100
- enum: [‘A’, ‘B’, ‘C’, ‘D’] 有该属性的字段要是数组里面的值才能插入数据库成功
- trim: true 去除字符串两边的空格
- default: 默认值
- validate: 自定义验证器
validate:{
validateor:()=>{
},
message:' 填要输出的错误信息 '
}
集合关联
不同集合的数据之间是有关系的
再创建一个物品集合,belongto属性关联Student表中的_id字段。
var goodSchema=new mongoose.Schema({
gname: { type: String } ,
belongto: { type: mongoose.Schema.Types.ObjectId, ref: 'Student' }
});
var Goods = mongoose.model('Goods', goodSchema);
Goods.create({
gname:'js开发',
belongto:'5fa4214a55544827940284ef'
}).then((err, result) => console.log(result));
通过添加populate()
方法查看结果
Goods.find().populate('belongto').then(result => console.log(result));
结果:
ods.create({
gname:'js开发',
belongto:'5fa4214a55544827940284ef'
}).then((err, result) => console.log(result));
通过添加populate()
方法查看结果
Goods.find().populate('belongto').then(result => console.log(result));
结果: