1.使用mongoose操作MongoDB
1.1 使用mongoose写链接成功、链接失败、链接关闭的回调函数
// 1.安装mongoose
const mongoose = require('mongoose')
// 2.导入mongoose
// (协议名称/ip地址:MongoDB端口号/数据库名称)
mongoose.connect('mongodb://127.0.0.1:27017/mongooseTest')
// 3.连接数据库
// 3.1 设置连接成功的回调
mongoose.connection.on('open', function() {
console.log('数据库连接成功')
})
//3.2 设置连接错误的回调
mongoose.connection.on('error', function(err) {
console.log('数据库连接失败', err)
})
// 3.3 设置连接关闭的回调
mongoose.connection.on('close', function() {
console.log('数据库连接关闭')
})
1.2 验证链接失败场景(使用定时器)
// 1.安装mongoose
const mongoose = require('mongoose')
// 2.导入mongoose
// (协议名称/ip地址:MongoDB端口号/数据库名称)
mongoose.connect('mongodb://127.0.0.1:27017/mongooseTest')
// 3.连接数据库
// 3.1 设置连接成功的回调
mongoose.connection.on('open', function() {
console.log('数据库连接成功')
})
//3.2 设置连接错误的回调
mongoose.connection.on('error', function(err) {
console.log('数据库连接失败', err)
})
// 3.3 设置连接关闭的回调
mongoose.connection.on('close', function() {
console.log('数据库连接关闭')
})
// 关闭MongoDB的连接
setTimeout(() => {
mongoose.disconnect()
}, 2000)
结果:
1.3 建立结构,实例化对象
// 1.安装mongoose
const mongoose = require('mongoose')
// 2.导入mongoose
// (协议名称/ip地址:MongoDB端口号/数据库名称)
mongoose.connect('mongodb://127.0.0.1:27017/mongooseTest')
// 3.连接数据库
// 3.1 设置连接成功的回调
mongoose.connection.on('open', function() {
// 创建文档结构对象
let BookSchema = new mongoose.Schema({
name: String,
author: String,
price: Number,
is_hot: Boolean
})
// 创建模型对象 对文档操作的封装对象
let BookModel = mongoose.model('Book', BookSchema)
// 新增
BookModel.create({
name: '《西游记》',
author: '吴承恩',
price: 100,
is_hot: true
}).then(data => {
console.log('新增成功', data)
}).catch(err => {
console.log('新增失败', err)
return
})
// 关闭数据库连接
mongoose.disconnect()
})
//3.2 设置连接错误的回调
mongoose.connection.on('error', function(err) {
console.log('数据库连接失败', err)
})
// 3.3 设置连接关闭的回调
mongoose.connection.on('close', function() {
console.log('数据库连接关闭')
})
结果:
1.4 mongoose中的字段类型
1.4.1基础类型:
Srting、Number、Boolean、Array、Date(日期)、Buffer;
1.4.2需指定的类型:
1.4.2.1
·Mixed(任意类型):需要使用‘mongoose.Schema.Types.Mixed’指定
test:mongoose.Schema.Types.ObjectId
1.4.2.2
·ObjectId(对象Id(文档ID(类似于主键,用于外键的联合查询): )):需要使用‘mongoose.Schema.Types.ObjectId’指定
1.4.2.3
·Decimal128(高精度数字);需要使用‘mongoose.Schema.Types.Decimal128’指定
1.5 mongoose中的字段值验证:插库前进行验证
1.5.1 requeired:表示该属性必须不为空
使用required设置name必须不为空
let BookSchema = new mongoose.Schema({
name:{
type:String,
required:true
},
author: String,
price: Number,
is_hot: Boolean,
})
对象模型中去掉name字段进行验证:
1.5.2 default(默认值):若对象没传入此值,则使用默认值
使用default设置author的默认值为‘匿名’
let BookSchema = new mongoose.Schema({
name:{
type:String,
required:true
},
author: {
type: String,
default: '匿名'
},
price: Number,
is_hot: Boolean,
})
结果:
1.5.3 enum(枚举):限制对象对应字段需要符合枚举值内部的
let BookSchema = new mongoose.Schema({
name:{
type:String,
required:true
},
author: {
type: String,
default: '匿名'
},
style: {
type: String,
enum: ['小说', '历史', '科技']
},
price: Number,
is_hot: Boolean,
})
测试当对象字段不为枚举数组中的对象:
测试当对象字段为枚举数组中的对象:
1.5.4 unique:限制对象在数据库内不重复(常用于主键)
let BookSchema = new mongoose.Schema({
name:{
type:String,
required:true,
unique:true
},
author: {
type: String,
default: '匿名'
},
style: {
type: String,
enum: ['小说', '历史', '科技']
},
price: Number,
is_hot: Boolean,
})
1.6 使用mongoose删除
// 删除一条
BookModel.deleteOne({
id:'69cd2fb7667543613aa0382b'
}).then(data => {
console.log('删除成功', data)
}).catch(err => {
console.log('删除失败', err)
return
})
结果:
1.7 使用mongoose删除
对象.updateOne({条件},{要改变的内容}).then(成功处理).chatch(错误捕捉)
1.8 使用mongoose更新
1.8.1 单条更新
// 更新一条
BookModel.updateOne({name:'《西游记》'},{$set:{price:10}}).then(function(data) {
console.log(data)
})
结果:
1.8.2 批量更新:将历史类型的书都改为科技
// 更新多条
BookModel.updateMany({style:'历史'},{$set:{style:'科技'}}).then(function(data) {
console.log(data)
})
结果: