了解 mongodb
和 mysql 的区别
- mysql 都是关系型数据库
- 存储, 多表存储, 每一个表里面可以写一个信息, 和其他表关联
- 多表联合查询
- 多表之间可以存在联系, 可以使用 sql 语句让多张表联合在一起
- mongodb 是非关系型数据库
- 存储, 以集合(库 database)的形式存储
- 集合里面都是以 json 文件的格式在存储
- 多个表之间没有联系, 不能通过语句来产生联系(因为根本没有固定语句)
安装 mongodb 数据库
-
官网下载
-
双击安装
-
使用, 找到你的 mongodb 安装目录, 进去以后切换到 bin 目录
- 在 bin 目录下使用 mongod 指令来运行
- mongodb 安装完毕以后, 只是一个服务, 没有磁盘空间来写内容
- 我们要自己创建一个文件夹
- 使用指令 $ mongod --dbpath e:cyj
-
为了使用方便
- 把 mongodb 配置到环境变量里面
- 找到 mongodb 的 bin 目录
- 把 bin 目录的绝对路径写入到 环境变量
- 环境变量配置好以后, 你在电脑的任何一个位置打开 cmd 都可以启动 mongod
-
为了更方便
- 新建文本文档
- 写入 mongod --dbpath e:cyj
- 把后缀改成 .bat
- 注意: 每次你要使用 mongodb 数据库的时候, 必须要使用 mongodb 执行启动服务
安装 robo 3t 的工具
- 是一个 mongodb 的可视化工具
- 简洁版的可视化工具
- 官网下载
- 建议你们下一个双包
- 双击安装
- 一路下一步,找到一个你喜欢的位置
- 使用
- 在 mongodb 服务启动的情况下
- 直接双击打开就可以操作你本地的 mongodb 数据库
操作 mongodb 数据库
- 使用一个第三方包叫做 mongoose
- 专门用来操作 mongodb 数据库
- 直接下载导入使用就可以了
mongoose 操作 mongodb 数据库
-
保证你的 mongodb 服务是开启的
-
使用 mongoose 里面的 connect 方法连接到 数据库
- 语法: mongoose.connect(url, 回调函数)
- url: 就是你本地 mongodb 的服务地址
- mongodb://localhost:27017/test
- 最后的 /test 就是你要操作的 database
- 如果你没有这个库, 他会给你建立一个
- 如果你有这个库, 就直接进去了
-
创建一个结构
- 使用 mongoose.Schema({ 集合的配置信息 })
- 是一个构造函数, 我们需要 new 一个实例
- 配置哪些字段, 使用什么数据格式
- 得到的是一个 结构实例
-
创建一个数据库操作模型
- 其实就是一个对象, 用来操作数据库中指定哪一张表的
- mongoose.model(表名, 所用的表格式)
- 表名: 必须是一个复数形式
- 所用的表格式: 必须是 Schema 的实例对象
- 返回一个和表连接好的操作模型对象
- 基本上操作数据库就是用或者返回的 模型 来操作
-
存储一条数据进去
- 创建一个数据信息存储进去
- new 操作模型().save()
// 0. 导入 mongoose const mongoose = require('mongoose') // 1-2. 连接到数据库 mongoose.connect('mongodb://localhost:27017/gp19', (err, info) => { if (err) return console.log(err) console.log('连接成功') }) // 1-3. 创建一个结构 const users = new mongoose.Schema({ username: String, age: Number, gender: String }) // 1-4. 获取表的操作模型(进入那一张表) const UserModel = mongoose.model('user', users) // 1-5. 存储一条信息 new UserModel({ username: '李思', age: 22, gender: '女' }) .save() .then(res => { console.log(res) console.log('存储成功') }) .catch(err => { console.log(err) console.log('存储失败') })
详细操作mongodb
-
解决警告问题
- 解析 url 地址的问题
- 需要在第二个参数进行一些配置, 以对象的形式
- useNewUrlParser: true
- useUnifiedTopology: true
-
集合可以填写的类型
- key : 数据类型(String, Number, Boolean, Array)
- key : { type: String, minlength: 5, maxlength: 10, … }
-
查询和筛选查询
-
查询
- 查询所有内容
- 直接利用模型使用 find()
-
筛选查询
- 需要在 find 以后使用
- or([{}, {}, {}])
- and([{}, {}])
- where({})
- 还有一种筛选查询的方式
- 直接在 find({ 筛选条件 })
- 还有一种筛选方式
- 纯链式编程
- find().where(‘age’).gt(20).lt(30)
- skip() 从哪一个索引位置获取
- limit() 获取多少个
- 需要在 find 以后使用
-
条件书写
- age: 20
- age: { $gt: 20 }
- age: { $lt: 20 }
- age: { $gt: 20, $lt: 30 }
-
其他查询方法
- 直接利用模型调用
- findbyId()
- findByIdAndDelete()
- findByIdAndRemove()
- findByIdAndUpdate()
- findOne()
- findOneAndRemove()
- findOneAndDelete()
- findOneAndUpdate()
-
// 0. 导入 mongoose
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/gp19', { useNewUrlParser: true, useUnifiedTopology: true }, (err, info) => {
if (err) return console.log(err)
console.log('连接成功')
})
const users = new mongoose.Schema({
username: String,
age: {
type: Number,
min: 18,
max: 60
},
gender: {
type: String,
// 这个位置的值必须是这个数组里面的内容
enum: ['男', '女', '保密']
},
hobby: Array,
desc: {
type: String,
minlength: 5,
maxlength: 10,
default: '我是一个管理员'
},
createTime: {
type: Date,
default: Date.now()
}
})
const UserModel = mongoose.model('user', users)
1.基础查询, 查询表中的所有数据
UserModel
.find({ username: '你好', age: { $gt: 20, $lt: 30 } })
// .or([{ username: 'Jack' }, { age: 18 }])
// .and([{ username: 'Jack' }, { age: 18 }])
// .where({ age: { $gte: 20, $lt: 30 } })
.then(res => {
console.log(res)
})
2.基础查询, 链式编程
UserModel
.find()
.where('age')
.gte(18)
.lte(20)
.then(res => {
console.log(res)
})
3.基础查询, 查询多少个
UserModel
.find()
.where('age')
.gte(18)
.lte(20)
.then(res => {
console.log(res)
})
其他查询方法
UserModel.findById('5f4da485530415140c1aff3a').then(res => console.log(res))
UserModel.findByIdAndDelete('5f4da485530415140c1aff3a').then(res => console.log(res))
UserModel.findByIdAndUpdate('5f4da44e233ea447b4ef9bfb', {
username: 'hello world'
}).then(res => console.log(res))
UserModel.findOne({ age: 22 }).then(res => console.log(res))
mongoose 修改的删除的方法
-
删除多个
-
deleteMany({ 条件 }).then()
-
删除多个, 只要满足条件的都会删除
-
条件也可以写多个
UserModel.deleteMany({ age: 22 }).then(res => console.log(res))
-
-
删除一个
-
deleteOne({ 条件 }).then()
-
删除一个, 找到数据库中满足条件的第一个删除
-
条件可以写多个
UserModel.deleteOne({ age: 24 }).then(res => console.log(res))
-
-
修改多个
-
updateMany({ 条件 }, { 要修改成什么 }).then()
-
根据条件修改多个, 只要满足条件的都修改
-
条件可以写多个
UserModel.updateMany({ age: { $gte: 20, $lt: 60 } }, { // 修改的时候要遵循你创建的时候的规则 gender: '保密' }).then(res => console.log(res))
-
-
修改一个
-
updateOne({ 条件 }, { 要修改成什么 }).then()
-
根据条件, 把满足条件的第一个修改掉
-
条件可以写多个
UserModel.updateOne({ gender: '保密' }, { age: 33 }).then(res => console.log(res))
-
// 0. 导入 mongoose
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/gp19', { useNewUrlParser: true, useUnifiedTopology: true }, (err, info) => {
if (err) return console.log(err)
console.log('连接成功')
})
const users = new mongoose.Schema({
username: String,
age: {
type: Number,
min: 18,
max: 60
},
gender: {
type: String,
// 这个位置的值必须是这个数组里面的内容
enum: ['男', '女', '保密']
},
hobby: Array,
desc: {
type: String,
minlength: 5,
maxlength: 10,
default: '我是一个管理员'
},
createTime: {
type: Date,
default: Date.now()
}
})
// 建立模型的时候, 根据结构建立模型, 如果有这个表, 那么就不再建立表
const UserModel = mongoose.model('user', users)