mongodb
mongodb与mysql的区别
- mysql 都是关系型数据库
-> 存储, 多表存储, 每一个表里面可以写一个信息, 和其他表关联
-> 多表联合查询
-> 多表之间可以存在联系, 可以使用 sql 语句让多张表联合在一起 - mongodb 是非关系型数据库
-> 存储, 以集合(库 database)的形式存储
-> 集合里面都是以 json 文件的格式在存储
-> 多个表之间没有联系, 不能通过语句来产生联系(因为根本没有固定语句)
操作mongodb数据库
- 使用一个第三方包叫做 mongoose
- 专门用来操作 mongodb 数据库
- 直接下载导入使用就可以了
- npm i mongoose
//0. 导入 mongoose
const mongoose = require('mongoose')
//1. 连接到数据库
//mongoose 默认端口号27017
mongoose.connect('mongodb://localhost:27017/gp19', (err, info) => {
if (err) return console.log(err)
console.log('连接成功')
})
//2. 创建一个结构 (他只是一个集合,表明数据结构,以后数据格式都要严格按照规定的结构执行。此时还不是数据库)
const users = new mongoose.Schema({
username: String,
age: Number,
gender: String
})
//3. 获取表的操作模型(进入那一张表)
const UserModel = mongoose.model('user', users)
//user,如果没有这个表时,他会给你创建这个表user,但是会自动变成复数形式,users
//同时,表不存在时,第一次使用该表要new UserModel(),否在是不存在的,之后可以直接使用UserModel修改表的内容
//4. 存储一条信息
new UserModel({
username: '李思',
age: 22,
gender: '女'
})
.save() //自带promise结构
.then(res => {
console.log(res)
console.log('存储成功')
})
.catch(err => {
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,
required:true, //表示属性必填
default: '我是一个管理员'
},
createTime: {
type: Date,
default: Date.now()
}
})
查询和筛选查询
const UserModel = mongoose.model('user', users)
查询 find
=> 查询所有内容
=> 直接利用模型使用 find()
UserModel.find({ username: '你好', age: { $gt: 20, $lt: 30 } })
筛选查询
- 需要在 find 以后使用
- or([{}, {}, {}])
- and([{}, {}])
- where({})
UserModel
.find({ username: '你好', age: { $gt: 20, $lt: 30 } })
//.or([{ username: 'Jack' }, { age: 18 }])// 满足某个 括号中是一个数组,数组中是若干个对象
//.and([{ username: 'Jack' }, { age: 18 }])// 并列条件
.where({ age: { $gte: 20, $lt: 30 } })// 直接写入需要满足的条件
其他查询方法
=> 直接利用模型调用
=> findbyId()
=> findByIdAndDelete()
=> findByIdAndRemove()
=> findByIdAndUpdate()
=> findOne()
=> findOneAndRemove()
=> findOneAndDelete()
=> findOneAndUpdate()
//id是数据库中自动生成的随机乱码
//查找
UserModel.findById('5f4da485530415140c1aff3a').then(res => console.log(res))
//查找并删除该id对应的数据
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))
删除操作
删除多个
=> 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))