前言
注意:
- 个人认为中文文档仅适合学习参考,英文文档才真正适合项目中使用
- 因为中文文档可能没有同步官网最新文档。
- 比如中文文档版本是5.x,但官网最新版文档是7.x,api已不支持回调,改为Promise,若使用了中文文档demo,会抛出各种错误。
操作符参考
操作符参考-https://www.mongodb.com/docs/manual/reference/operator/query/gte/
- 备用地址 - https://www.mongodb.com/docs/manual/reference/operator/query/gte/
版本号
mongodb v6.0.5
mongoose v7.1.1
mongoose中文文档 - http://mongoosejs.net/docs/guide.html
mongoose英文文档 - https://mongoosejs.com/docs/subdocs.html
vite配置
-
配置
"type": "module"
-
参考配置 - 重点第五行
pacgage.json
{
"name": "myui",
"version": "0.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "vite --host 0.0.0.0",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"mongoose": "^7.1.0",
"vue": "^3.2.45",
"vue-router": "^4.1.6",
},
"devDependencies": {
"vite": "^4.0.1"
}
}
mongoose链接数据库
src/service/dbcontent.js
import mongoose from "mongoose"
const db = mongoose.connect('mongodb://127.0.0.1:27017/test')
db.then(mg=> { // 其实参数mg就是mongoose对象
const { Schema } = mg
console.log(mongoose === mg)//true
console.log(mongoose.Schema === Schema)//true
}, err => console.log(err))
- 密码、更多链接方式参考 - https://mongoosejs.com/docs/connections.html
- 大多数情况数据库链接功能应作为一个模块导出
导出:
src/service/dbcontent.js
import mongoose from "mongoose"
const db = mongoose.connect('mongodb://127.0.0.1:27017/test')
export default db
使用:
重点: 导入import db from "./dbcontent.js"
必须加后缀.js
与相对路径./
- 使用以下方式导入会报错
import db from "./dbcontent"
没有.js
后缀import db from "dbcontent.js"
没有相对路径./
import db from "/dbcontent.js"
没有相对路径./
import db from "@/dbcontent.js"
只能是相对路径./
顶层await参考
- 顶层await参考-http://t.csdn.cn/eVeFT
- 备用地址 - http://t.csdn.cn/eVeFT
src/service/app.js
import db from "./dbcontent.js"
const mg = await db
const { Schema } = mg
const conn = mg.connection
console.log('数据库已连接')
model与Schema
- model(colName,data) - 创建的模型
- colName 集合名称,若数据库没有指定的集合名称会自动创建
- type: String
- data 添加的数据
- type: [Object,Array]
- colName 集合名称,若数据库没有指定的集合名称会自动创建
- Schema(config) - 创建模型的规则
- config - 规则配置
- type: Object
- config - 规则配置
创建一个model前必须有Schema规则
- Schema是规定model的数据类型
- 若创建的model与规定的Schema规则不符会报错
demo.js
// 连接数据库
import mongoose from "mongoose"
const db = mongoose.connect('mongodb://127.0.0.1:27017/test')
// mg -> mongoose
const mg = await db //等待数据库连接
const { Schema } = mg //获取Schema
const conn = mg.connection //获取connection连接方法
// 1. 创建Schema(制定规则)
const userSchema = new Schema(
{
name: String
}
)
// 2. 创建model,并在集合users中使用userSchema规则
const UserModel = mg.model('users', userSchema)
// 3. 使用UserModel创建实例
const user = new UserModel(
{
name: '我是老6呀'
}
)
// 4. 保存创建的实例,保存失败会报错,成功将返回结果
const userSaveStatu = await user.save()
// 查看创建结果
console.log(userSaveStatu)
// 5. 关闭数据库连接
conn.close()
- node环境运行
增
- 可直接嵌套Schema
// 在集合users增加数据
const UserModel = mg.model('users', new Schema({
age: {
type: Number,//数据类型为Number
min: 6,//最小值
max: 251//最大值
},
name: {
type: String,
trim: true,//是否清空字符串首尾空格
minlength: 2,//字符串最小长度
maxlength: 20//字符串最大长度
},
sex: {
type: Number,
enum: [0, 1],//枚举
default: 1//默认值
}
}))
// 保存
const createUser = await new UserModel({
age: Math.round(Math.random() * (251 - 6)) + 6,
name: '小米呀',
sex: Math.round(Math.random())
}).save()
console.log(createUser)
// 关闭连接
conn.close()
node环境运行结果
删(deleteMany || deleteOne)
const UserModel = mg.model('users', new Schema(
{
userName: String,
pas: String,
// 嵌套的文档
posts: [
new Schema(
{
data: String
}
)
]
}
))
// 删除一个
const delUser = await UserModel.deleteOne({ userName: '小林同学' })
// 删除多个 删除age大于等于18的数据
const delMore = await UserModel.deleteMany({ age: { $gte: 18 } })
console.log(delUser)
console.log(delMore)
// 关闭连接
conn.close()
- 打印结果
- acknowledged
- true 删除成功
- false 删除失败
- deletedCount 删除数量
- acknowledged
{ acknowledged: true, deletedCount: 1 }
{ acknowledged: true, deletedCount: 2 }
常用命令
- conn.dropDatabase(dbName) - 删除数据库
- dbName 数据库名称
- type : String
- 返回值
- Promise
- dbName 数据库名称
// 删除test数据库
const delDb = await conn.dropDatabase('test')
console.log(delDb);
- conn.dropCollection(colName) - 删除数据库
- colName 集合名称
- type : String
- 返回值
- Promise
- colName 集合名称
// 删除store集合
const delCol = await conn.dropCollection('store')
console.log(delCol);
connection数据库连接事件
connecting
数据库初始链接时connected
数据库连接成功时,或失去链接重连时。就像我去开车,刚插上车钥匙时open
已连接数据库,且可操作数据库 。就像我去开车,车已经启动完成,踩下油门就可以跑时disconnected
与数据库失去链接时,可能是代码显式关闭连接、数据库服务器崩溃或网络连接问题造成。就像我车开着开着就突然熄火了close
成功关闭数据库时。就像我把车熄火,并拔了车钥匙时reconnected
与数据库失去连接,并成功重新连接时。就像我车开着开着熄火了,我又重新启动车辆时。error
连接出错all
连接到副本集并且Mongoose已成功连接到连接字符串中指定的所有服务器时时
demo.js
import mongoose from "mongoose"
const readUrl = 'mongodb://jxzr:123456@127.0.0.1:27017/juxianz'
const db = mongoose.connect(readUrl )
conn.on('close',res=>console.log('关闭'))
setTimeout(() => {
conn.close()
}, 1000)