使用TS封装操作MongoDB数据库的工具方法
使用TS封装操作MongoDB数据库的工具方法
前言
在做毕业设计过程中采用了MongoDb存储应用的日志信息,总结了一些CRUD方法与大家分享一下,最终使用效果可跳转到业务调用示例这一小节查看
关于MongoDb的入门教程推荐大家阅读:
获取数据库链接
const {
host, port, user, password, database,
} = mongodbConfig
const url = `mongodb://${user}:${password}@${host}:${port}/${database}`
// 如果没有设置账号与密码,可以省略
// const url = `mongodb://${host}:${port}/${database}`
interface Res {
db: MongoClient
Db: Db
}
function getDBConnection(): Promise<Res> {
return new Promise((res, rej) => {
MongoClient.connect(url, {
useUnifiedTopology: true,
useNewUrlParser: true,
}).then((db) => {
res({
db,
Db: db.db(database),
})
}).catch((err) => {
rej(err)
})
})
}
使用Promise对其进行包装,返回db(连接实例)与DB(数据库实例)
包装数据库查询方法
// 传入的回调函数类型定义
type Callback<T> = (db: Db, resolve: (value: T | PromiseLike<T>) => void) => void
export function query<T>(callback: Callback<T>): Promise<T> {
const p = new Promise<T>((resolve, rej) => {
getDBConnection().then(({ db, Db }) => {
// 执行回调
callback(Db, resolve)
// resolve后关闭
p.catch((e) => rej(e))
.finally(() => {
db.close()
})
})
})
return p
}
获取到链接实例,由调用方传入需要执行的回调函数,在执行resolve后自动通过finally中的回调断开数据库的链接
CRUD
插入数据
function insertCollection<T>(collection: string, data: T[] | T, many = false){
return mongoDbQuery<InsertOneWriteOpResult<WithId<T>>>((db, resolve) => {
if (many && Array.isArray(data)) {
db.collection<T>(collection).insertMany(data as any).then(resolve as any)
return
}
db.collection<T>(collection).insertOne(data as any).then(resolve)
})
}
参数:
- 目标的数据表名
- 待插入的数据
- 是否同时插入多个数据
查询数据
function findCollection<T>(collection: string, query: FilterQuery<T>){
return mongoDbQuery<T[]>((db, resolve) => {
db.collection<T>(collection).find(query).toArray().then((data) => {
resolve(data)
})
})
}
参数:
- 目标的数据表名
- 查询条件
更新数据
function updateCollection<T>(collection: string, query: FilterQuery<T>, data: UpdateQuery<T> | Partial<T>, many = false){
return mongoDbQuery<UpdateWriteOpResult>((db, resolve) => {
if (many) {
db.collection<T>(collection).updateMany(query, data).then(resolve)
return
}
db.collection<T>(collection).updateOne(query, data).then(resolve)
})
}
参数:
- 目标的数据表名
- 查询条件
- 新的数据
- 是否批量更新
删除数据
function deleteCollection<T>(collection: string, query: FilterQuery<T>, many = false) {
return mongoDbQuery<DeleteWriteOpResultObject>((db, resolve) => {
if (many) {
db.collection(collection).deleteMany(query).then(resolve)
return
}
db.collection(collection).deleteOne(query).then(resolve)
})
}
业务调用示例
方法封装好后,业务调用就很简单明了与语义化了,跟直接在mongoDB Shell中写指令一样顺手
function addUser(userId: string, options = {}) {
const defaultOptions = {
nickname: '随机',
gender: Gender.MALE,
lastLogin: new Date(),
loginCount: 0,
avatar: '/static/logo.png',
}
const ops = Object.assign(defaultOptions, options)
return insertCollection('user', { userId, ...ops })
}
function findUser(user:User) {
return findCollection<User>('user', user)
}
function updateUserInfo(userId: string, info: User) {
return updateCollection<User>('user', {
userId,
}, {
$set: info,
})
}
function deleteUser(userId: number) {
return deleteCollection<User>('user', { id: userId })
}
最后
完整源码地址移步这里
使用TS封装操作MongoDB数据库的工具方法的更多相关文章
- NodeJS操作MongoDB数据库
一.node.js对于mongodb的基本操作 1.数据库的开机 首先我们要先对数据库进行开机的操作,建立一个文件夹用于存放数据库文档.如D:\mongo,接下去在cmd当中键入命令-> mon ...
- NodeJs连接操作MongoDB数据库
NodeJs连接操作MongoDB数据库 一,介绍 MongoDB是一种文档导向数据库管理系统,由C++撰写而成.介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作. Mongo ...
- mongoose之操作mongoDB数据库
mongoose是node.js操作mongoDB数据库的一种工具,借助于mongoose,我们可以便捷的完成一些数据库的基本操作,基本使用如下: 1.安装 npm install mongoose ...
- Koa 操作 Mongodb 数据库
node-mongodb-native的介绍 使用基于官方的 node-mongodb-native 驱动,封装一个更小.更快.更灵活的 DB 模块, 让我们用 nodejs 操作 Mongodb 数 ...
- MongoDB学习【四】—pymongo操作mongodb数据库
一.pymongodb的安装 Python 要连接 MongoDB 需要 MongoDB 驱动,这里我们使用 PyMongo 驱动来连接. pip安装 pip 是一个通用的 Python 包管理工具, ...
- 不使用spring的情况下原生java代码两种方式操作mongodb数据库
由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常. 主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...
- 不使用spring的情况下用java原生代码操作mongodb数据库的两种方式
由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常. 主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...
- C# Asp.net中简单操作MongoDB数据库(二)
C# Asp.net中简单操作MongoDB数据库(一) , mongodb数据库连接可以回顾上面的篇幅. 1.model类: public class BaseEntity { /// < ...
- C# Asp.net中简单操作MongoDB数据库(一)
需要引用MongoDB.Driver.dll.MongoDB.Driver.core.dll.MongoDB.Bson.dll三个dll. 1.数据库连接: public class MongoDb ...
- PHP操作MongoDB 数据库
最近有个项目,需要用php操作mongoDb数据,整理如下 1,连接MongoDB数据库 $conn = new Mongo(); 其他链接方式 //$conn=new Mongo(); #连接本地主 ...
随机推荐
- 【奶奶看了都会】ComfyUI+SVD制作AI视频教程,附效果演示
AI一天,人间一年 大家好啊,我是小卷,最近AI绘画又发展出一些新玩意了,小卷因为工作的关系有一个月没关注AI的发展了,都有点跟不上版本节奏了... 1.comfyui的使用效果 今天给大家介绍下AI ...
- 零基础入门学习Java课堂笔记 ——day02
流程控制 1.Scanner对象 来源:java.util.Scanner 我们可以通过Scanner类来获取用户的输入输出 用户交互Scanner 通过new关键词创建Scanner对象 Scann ...
- C#/.NET该如何自学入门?
前言 随着DotNetGuide技术社区交流群的不断壮大(目前4个群都已经满500人,已开5群现已有180多个小伙伴),越来越多应届生和其他领域的小伙伴加入了我们这个大家庭.在此期间我在个人微信.公众 ...
- macOS 远程桌面windows方法
1.利用微软官方的软件:https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/ ...
- mybatis SQL in() 为什么要在 mapper.xml里 用 foreach
结论: 若存在 in () 语句,要使用 #{} 预编译入参的方式,需要在 mapper.xml里 使用 foreach ======================================= ...
- Oracle-报错信息显示问号或者乱码(Oracle 19c)
问题描述: 通过sqlplus登录Oracle19c时,执行SQL出现报错时,显示错误码出现问号: 解决方法: su - oracle vi .bash_profile 添加如下一行内容: ex ...
- 2023 CSP-J/S游记
8.14 打了场 luogu 的 \(SCP\) ,给打没信心了. 8.16 普及模拟1 8.19 普及模拟2 8.22 普及模拟3 9.5 二调讲评结束后,和班主任说了考 \(CSP\) 的事情,就 ...
- 深入 Nginx 之架构篇[转]
前言 最近在读 Nginx 相关的书籍,做一下读书笔记. Nginx 作为业界知名的高性能服务器,被广泛的应用.它的高性能正是由于其优秀的架构设计,其架构主要包括这几点:模块化设计.事件驱动架构.请求 ...
- 【Unity3D】水波特效
1 水波特效原理 水面特效 中基于 Shader Graph 实现了模拟水面特效,包含波纹.起伏.折射.泡沫等细节,本文将基于屏幕后处理实现环形水波特效. 水波特效属于 Unity3D 后处理 ...
- 【libGDX】ApplicationAdapter生命周期
1 前言 libGDX 中,用户自定义的渲染窗口需要继承 ApplicationAdapter 类,ApplicationAdapter 实现了 ApplicationListener 接口,但实 ...