使用TS封装操作MongoDB数据库的工具方法

前言

在做毕业设计过程中采用了MongoDb存储应用的日志信息,总结了一些CRUD方法与大家分享一下,最终使用效果可跳转到业务调用示例这一小节查看

关于MongoDb的入门教程推荐大家阅读:

菜鸟教程: MongoDB

菜鸟教程: Node.js 连接 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)
})
}

参数:

  1. 目标的数据表名
  2. 待插入的数据
  3. 是否同时插入多个数据

查询数据

function findCollection<T>(collection: string, query: FilterQuery<T>){
return mongoDbQuery<T[]>((db, resolve) => {
db.collection<T>(collection).find(query).toArray().then((data) => {
resolve(data)
})
})
}

参数:

  1. 目标的数据表名
  2. 查询条件

更新数据

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)
})
}

参数:

  1. 目标的数据表名
  2. 查询条件
  3. 新的数据
  4. 是否批量更新

删除数据

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数据库的工具方法的更多相关文章

  1. NodeJS操作MongoDB数据库

    一.node.js对于mongodb的基本操作 1.数据库的开机 首先我们要先对数据库进行开机的操作,建立一个文件夹用于存放数据库文档.如D:\mongo,接下去在cmd当中键入命令-> mon ...

  2. NodeJs连接操作MongoDB数据库

    NodeJs连接操作MongoDB数据库 一,介绍 MongoDB是一种文档导向数据库管理系统,由C++撰写而成.介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作. Mongo ...

  3. mongoose之操作mongoDB数据库

    mongoose是node.js操作mongoDB数据库的一种工具,借助于mongoose,我们可以便捷的完成一些数据库的基本操作,基本使用如下: 1.安装 npm install mongoose ...

  4. Koa 操作 Mongodb 数据库

    node-mongodb-native的介绍 使用基于官方的 node-mongodb-native 驱动,封装一个更小.更快.更灵活的 DB 模块, 让我们用 nodejs 操作 Mongodb 数 ...

  5. MongoDB学习【四】—pymongo操作mongodb数据库

    一.pymongodb的安装 Python 要连接 MongoDB 需要 MongoDB 驱动,这里我们使用 PyMongo 驱动来连接. pip安装 pip 是一个通用的 Python 包管理工具, ...

  6. 不使用spring的情况下原生java代码两种方式操作mongodb数据库

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  7. 不使用spring的情况下用java原生代码操作mongodb数据库的两种方式

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  8. C# Asp.net中简单操作MongoDB数据库(二)

    C# Asp.net中简单操作MongoDB数据库(一)    , mongodb数据库连接可以回顾上面的篇幅. 1.model类: public class BaseEntity { /// < ...

  9. C# Asp.net中简单操作MongoDB数据库(一)

    需要引用MongoDB.Driver.dll.MongoDB.Driver.core.dll.MongoDB.Bson.dll三个dll. 1.数据库连接: public class MongoDb ...

  10. PHP操作MongoDB 数据库

    最近有个项目,需要用php操作mongoDb数据,整理如下 1,连接MongoDB数据库 $conn = new Mongo(); 其他链接方式 //$conn=new Mongo(); #连接本地主 ...

随机推荐

  1. 零基础入门学习JAVA课堂笔记 ——DAY08

    异常 1.什么是异常? Exception 异常是指程序在运行过程中出现的不期而至的各种状况 异常发生在程序运行期间,它影响了正常程序执行流程 通俗易懂的表达就是,程序在发生意料之外或者拿到的不是想要 ...

  2. 云计算 - 对象存储服务OSS技术全解

    本文全面深入地探讨了对象存储服务(OSS)的核心技术.基础知识和高级功能.从媒体存储到数据备份,再到数据仓库与数据湖,我们不仅解析了OSS在各种应用场景下的关键角色,还深入讨论了其与机器学习.多媒体处 ...

  3. ASP.NET Core分布式项目实战(oauth2 + oidc 实现 client部分)--学习笔记

    任务16:oauth2 + oidc 实现 client部分 实现 client 之前启动一下上一节的 server,启动之前需要清除一些代码 注释 Program 的 MigrateDbContex ...

  4. java 从零开始手写 redis(六)redis AOF 持久化原理详解及实现

    前言 java从零手写实现redis(一)如何实现固定大小的缓存? java从零手写实现redis(三)redis expire 过期原理 java从零手写实现redis(三)内存数据如何重启不丢失? ...

  5. IPFS 添加和管理文件

    IPFS的文件有不同的模式 默认模式 默认模式下, 文件会被解析并存入blocks, 同时文件的结构被存入filestore, 因为IPFS是按内容寻址的文件系统, 在添加时最外层的目录名或文件名信息 ...

  6. Event对象

    Event对象 Event对象表示在DOM中出现的事件,在DOM中有许多不同类型的事件,其主要使用基于Event对象作为主接口的二次接口,Event对象本身包含适用于所有事件的属性和方法. 描述 事件 ...

  7. HTMLElement对象

    HTMLElement对象 任何HTML元素都继承于HTMLElement对象,一些元素直接实现这个接口,而另一些元素通过多层继承来实现它. 属性 从其父元素Element继承属性,并从Documen ...

  8. 将docker镜像推送到阿里云镜像仓库

    1.注册阿里云账号(支付宝扫码登录也可以) 进入控制台,找到[容器镜像服务] 2.创建命名空间 3.创建镜像仓库 4.设置授权凭证 5.登录 docker login --username=index ...

  9. 《系列一》-- 5、xml配置文件解析之[自定义]命名空间[标签]的解析

    阅读之前要注意的东西:本文就是主打流水账式的源码阅读,主导的是一个参考,主要内容需要看官自己去源码中验证.全系列文章基于 spring 源码 5.x 版本. Spring源码阅读系列--全局目录.md ...

  10. golang常用库:gorilla/mux-http路由库使用

    golang常用库:gorilla/mux-http路由库使用 golang常用库:配置文件解析库/管理工具-viper使用 golang常用库:操作数据库的orm框架-gorm基本使用 一:gola ...