目录
Node 中 mongoose 使用
本文介绍 mongoose
库的简单使用,mongoose 主要用于在 Node 环境下对 mongodb 的操作。
1. 初始化工程并安装 mongoose 库
npm init
npm i mongoose
主要目录结构:
database/
|- modules/
|- Employee.js
|- EmployeeAction.js
|- mongodb.js
2. 编写连接 mongodb 代码
需要 mongodb 的连接字符串,可以使用 dotenv 存储,这里为了简单直接写在代码中,mongodb 可以免费使用 cloud mongodb 云上。
[mongodb.js]
import mongoose from "mongoose";
const COLLECTION = 'TT_D';
const MONGODB_URL = `mongodb+srv://wangjunneil:[email protected]/${COLLECTION}?retryWrites=true&w=majority`;
function connectMongo() {
// 若已经链接
if (mongoose.connections[0].readyState) {
console.log('MongoDB is already connected');
return
}
mongoose.connect(MONGODB_URL)
.then(() => {
console.log('MongoDB connected')
})
.catch(error => {
console.log(error)
});
}
export default connectMongo;
3. 定义模型 Schema
每个模型都需要定义,这里以 employee
模型为例,主要定义模型属性及约束。使用 mongoose 的 schema 定义完成模型后,默认自带各种操作方法。
[Employee.js]
import { Schema, model, models } from 'mongoose';
// 定义模型 Schema
const employeeSchema = new Schema({
empId: {
type: Number,
required: true,
unique: true // 唯一索引
},
name : {
type: String,
required: true,
minlength: 2, // 最小长度
maxlength: 4, // 最大长度
index: true // 普通索引
},
sex: {
type: String,
required: true,
default: 'male', // 默认值
enum: ['male', 'female', 'middle'] // 枚举范围
},
age: {
type: Number,
required: true,
min: 10, // 最小值
max: 99 // 最大值
},
phone: {
type: Number,
required: true,
match: /^\d{11}$/ // 正则验证
},
image: {
type: String,
set(url) { // 可用 set 方法处理值
return `https://fla.cdn.bosyun.com/other/${url}`
}
}
}, { timestamps: true })
const Employee = models.employee || model('employee', employeeSchema);
export default Employee
4. 编写模型操作函数
[EmployeeAction.js]
import connectMongo from '@/database/mongodb';
import Employee from './Employee';
// 连接
connectMongo();
export async function createEmployee(data) {
try {
const newEmployee = Employee(data);
await newEmployee.save();
return { ...newEmployee._doc, _id: newEmployee._id.toString() };
} catch (error) {
throw new Error(error.message || 'Failed to create employee')
}
}
export async function queryEmployeeAll() {
try {
const employees = await Employee.find();
// id 转字符串
const newData = employees.map(post => (
{
...post._doc,
_id: post._doc._id.toString()
}
));
return newData;
} catch (error) {
throw new Error(error.message || 'Failed to query employee')
}
}
export async function deleteEmployee(condition) {
try {
await Employee.deleteOne(condition);
} catch (error) {
throw new Error(error.message || 'Failed to delete employee')
}
}
export async function updateEmployee(condition, data) {
try {
await Employee.updateOne(condition, data);
} catch (error) {
throw new Error(error.message || 'Failed to update employee')
}
}
5. 调用模型操作函数
const data = {
empId: 101,
name: '里斯',
age: 29,
phone: 16712068888,
image: 'vod-poster-2.jpg'
}
// 新增
await createEmployee(data);
// 修改
await updateEmployee({empId:101}, {name:'王武'})
// 删除
await deleteEmployee({empId: 100});
// 查询
const employees = await queryEmployeeAll();
console.log(employees);
基于 mongodb,这里只是用到最基本的 C.R.U.D,还提供很多聚合函数,业务实际场景具体使用。
Reference
版权所有,本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。转载请注明出处:https://www.wangjun.dev//2023/07/how-to-use-mongoose/