一、 数据库概述及环境搭建
MongoDB
下载MongoDB以及MongoDB Compass图形界面
1. 数据库相关概念
在一个数据库软件中可以包含多个数据仓库,在每个数据仓库中可以包含多个数据集合,每个数据集合中可以包含多条文档(具体的数据)
术语 | 解释证明 |
---|---|
database | 数据库,mongoDB数据库软件中可以建立多个数据 |
collection | 集合,一组数据的集合,可以理解为javaScript中 的数组 |
document | 文档,一条具体的数据,可以理解为javaScript中的对象(以JSON对象存储) |
field | 字段,文档中的属性名称,可以理解为javaScript中的对象属性 |
2. Mongooset第三方包
- 使用Node.js操作MongoDB数据库需要依赖Node.js第三方包mongoose
- 使用npm install mongoose 命令下载
3. 启动/关闭MongoDB
在命令行工具中运行net start mongodb net stop mongodb 即可启动MongoDB,否则MongDB将无法连接
二 、MongoDB 数据库连接
1. connect
使用mongoose提供的connect 方法即可连接数据库
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/plabck')
.then(() => console.log('数据库连接成功'))
.catch(err => console.log('数据库连接失败', err));
在命令行中运行,可以看出虽然数据库已经连接成功,但是会报一些小的错误
对于报错信息,经过翻译和百度,对代码进行修改,如下:
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/plabck', {
useNewUrlParser: true , //node:8060报错修改
useUnifiedTopology: true //node:8060报错修改
}).then(() => console.log('数据库连接成功'))
.catch(err => console.log('数据库连接失败', err));
2. 创建数据库
在MongoDB中不需要显示创建数据库,如果正在使用的数据库不存在,MongoDB会自动创建
三、MongoDB增删改查操作
1.创建集合【增】
创建集合分为两步,一是对对集合设定规则, 二是创建集合, 创建mongoose。schema构造函数的实例即可创建集合
//创建集合规则
const courSchema = new mongoose.Schema({
name: String,
author: String,
isPublished: Boolean
})
//使用规则创建集合
//1. 数据库名称(这里创建的'Course',在数据库中显示为courses)
//2. 集合规则
const Course = mongoose.model('Course', courseSchema);
注:mongoose.model() 是有返回值的,它的返回是这个集合的构造函数,如const Course = mongoose.model('Course', courseSchema);
中Course接收就是构造函数,并且Course(构造函数)中有很多的方法和属性,可以让我们方便的对集合进行操作
1.1创建文档(方式一)【增】
创建文档实际上就是向集合中插入数据
分为两步
1)创建集合实例
2)调用实例对象下的save方法将数据保存到数据库中
//创建文档
const course = new Course({
name: 'node.js基础',
author: 'AIEIFE',
isPublished: true
})
course.save(); //保存(实际上就是将文档插入到数据库中)
1.1.1 创建文档(方式二)【增】
使用构造函数下的 create() 也可以创建文档,如下代码所示,可以得到create()返回的是 promise 对象
//回调函数接收异步API
course.create({
name: 'javascript',
author: '黑马讲师',
isPublished: false
}, (err, doc) => {
//错误对象
console.log(err);
//当前插入的文档
console.log(doc);
})
//promise对象接收异步API
course.create({name: 'JAVA', author: 'IDODS', isPublished: true})
.then(doc => console.log(doc))
.catch(err => console.log(err))
2. mongoDB数据库导入数据【增】
命令语句: mongoimport -d 数据库名称 -c 集合名称 -file 要导入的数据文件
在使用上述命令语句之前,我们要配置系统变量path 。找到MongoDB安装目录下的bin/mongoimport.exe文件,复制bin目录文件路径,添加到系统变量path中
注: 对于mongoDB高版本下的bin目录中没有 Mongoimprot.exe 文件,这是官网给我们另外的MongoDB Database安装包,只需去下载安装就可以https://www.mongodb.com/try/download/database-tools?tck=docs_databasetools
3. 查询文档【查】
3.1 find()
根据文件查询文档(条件为空则查找所有文档)
// find()查询用户集合中的所有的文档,内部可设置查询条件
// 使用name 属性对course集合进行查询
course.find({name: 'JAVA'}).then(result => console.log(result));
返回文档集合:
3.2 findOne()
根据条件查找文档
//findOne() 返回一条文档,默认为集合的第一条文档,内部也可设置查询条件
course.findOne({_id: '60fd6fe8370b233720de40d4'}).then(result => console.log(result));
find() 与 findOne() 的区别
- find() 可以返回一组文档
- findOne() 只能返回一条文档
4. 删除文档【删】
4.1 findOneAndDelete() ----单个删除
/*
查找到一条文档并且删除
返回删除的文档
如果查询条件匹配了多个文档,那么将会删除第一个匹配的文档
*/
course.findOneAndDelete({}).then(result => console.log(result));
4.2 deleteMang() ----多个删除
/*
查找到所有匹配的文档并且删除
返回值:1.n ----代表符合条件被删除的文档数量
2. ok ----值为1表示当前操作成功
*/
course.deleteMany({}).then(result => console.log(result));
5. 更新文档【改】
5.1 updateOne() ----单个更新
//course.updateOne({查询内容}, {修改内容}).then(result => console.log(result));
course.updateOne({name: 'JAVA'}, {name: 'JAVA SE'}).then(result => console.log(result));
5.2 updateMany() ----多个更新
//course.updateOne({查询条件}, {修改内容}).then(result => console.log(result));
course.updateOne({}, {name: 'JAVA SE'}).then(result => console.log(result));
MongoDB使用小结
- 使用connect 方法完成node.js与数据库的连接,并在连接中完成数据库的创建
- 使用Schema 完成集合规则的创建, 使用已创建的规则创建集合(model方法创建)
- 使用集合返回的构造函数完成文档的创建,添加到数据库中(save() 方法添加)
- 集合的创建可以使用集合中的方法和属性对集合中的文档内容进行增删查改操作
附上完整代码
const mongoose = require('mongoose');
//数据库连接
mongoose.connect('mongodb://localhost/plabck', {
useNewUrlParser: true ,
useUnifiedTopology: true
}).then(() => console.log('数据库连接成功'))
.catch(err => console.log('数据库连接失败', err));
//创建集合规则
const courSchema = new mongoose.Schema({
name: String,
author: String,
isPublished: Boolean
})
//使用规则创建集合
//1. 集合名称(这里创建的'Course',在数据库中显示为courses)
//2. 集合规则
const course = mongoose.model('Course', courSchema);
补充:
对于查询条件我单独划出来了https://editor.csdn.net/md/?articleId=119106500