MongoDB数据库
数据库及坏境搭建
使用数据库原因
- 动态网站中的数据都是存储在数据库中
- 数据库可以持久存储客户端通过表单收集的用户信息;
- 数据库软件本身就可以对数据高效管理;
什么是数据库
存储数据的仓库,将数据有序分门别类的存储,通过API操作
常见数据库软件又:mysql mongoDB oracle
MongoDB数据库下载安装
MongoDB菜鸟教程
MongoDB官方学习网站
安装MongoDB Compass可视化软件
数据库相关概念
集合就是类别的意思,集合中又可以有多个文档,在这个文档里面又又很多属性;
Mongoose第三方包
开启mongodb
因为权限问题需要以管理员身份运行powershell
数据库连接
使用mongoose提供的connect方法即可连接数据库;
84
对使用mongoose使用时遇到的问题
解决方法:
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/playground', {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(() => {
console.log('数据库连接成功') })
.catch(err => console.log('数据库连接失败'))
- 创建数据库,在MongoDB中不需要显示创建数据库,如果正在使用的数据库不存在,MongoDB会自动创建;
MongoDB增删改查操作
1. 创建集合
如何创建集合呢?插入的文档一定要属于一个类别;
创建集合分为两步:一是对集合设定规则,而是创建集合,创建mongoose.Schema构造函数的实例即可创建集合;
前面讲了集合就相当于JavaScript里面的数组;创建集合并应用规则;
创建Schema构造函数的实例对象
创建集合规则
const courseSchema = new mongoose.Schema({
name: String,
author: String,
isPublished: Boolean
});
使用规则创建集合,下面代码中的Course就是集合的构造函数
const Course = mongoose.model('Course', courseSchema) //courses
2. 创建文档
连接数据库应该在compass中看到数据,所以需要向集合中插入数据即创建文档分为两步:
- 创建集合实例
- 调用实例对象下的save方法将数据保存到数据库中
代码示例,下列代码执行完之后刷新一下compass便可以在compass中看到数据库playground(自己定义的)
//Course是集合的构造函数
const course = new Course({
name: 'node.js基础',
author: '黑马',
isPublished: true
});
course.save();//将文档插入到数据库中
数据库界面
第二种创建文档的方式
利用Course
构造函数下面的方法create
,creat里面有回调函数证明是异步API,实际上在数据库操作中都是异步API;
Course.create({
name: 'JavaScript', author: '黑马2', isPublished: false }, (err, result) => {
console.log(err);
console.log(result);
})
上面代码还可以写为另外一种形式,使用promise的方法 then catch不适用回调函数
上面代码结果
3. mongoDB数据库导入数据
首先需要在MongoDB安装目录找到安装路径bin文件里面但是在我的bin目录下没有mongoimport.exe这个文件,所以呢,参考文档
mongoimport -d 数据库名称 -c 集合名称 --file 要导入的数据文件
这要去powerShell下执行,我在VSCode提供的终端调试工具下执行任然会报错
在compass中可以看到新增加的数据user
4. 查询文档
find
里面没有参数则查询用户集合中的所有文档
代码示例
User.find().then(result => console.log(result));
find
可以根据id
值去查找:
代码示例
User.find({
_id: '5c09f267aeb04b22f8460968' }).then(result => console.log(result))
上面代码执行结果
通过find
查询的文档返回都是以数组形式;
findOne
默认返回一条数据
代码示例
User.findOne().then(result => console.log(result))
//User.findOne({ name: '李四' }).then(result =>