使用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. 小知识:杜绝明文密码,OGG的credentialstore特性

    之前OGG配置文件中都会明文记录密码,而在OGG12c及以上版本中,有一个特性credentialstore,可以用来杜绝明文密码,提升安全性. 这里测试添加credentialstore并配置数据库 ...

  2. 《ASP.NET Core 微服务实战》-- 读书笔记(第11章)

    第 11 章 开发实时应用和服务 在本章,我们将讨论"实时"的准确含义,以及在大部分消费者看来应该属于这一范畴的应用类型 接着,我们将探讨 WebSocket,并分析为什么传统的 ...

  3. NC20240 [SCOI2005]互不侵犯KING

    题目链接 题目 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案. 国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. 输入描述 只有一行 ...

  4. Android 自动化测试项目

    1 前言 ​ 在 Android自动化测试框架uiautomator2详解 中,介绍了 uiautomator2 框架的环境配置.元素定位工具以及常用接口. ​ 本文对 uiautomator2 框架 ...

  5. Laravel入坑指南(7)——中间件Middleware

    Laravel框架中引入了"中间件"这个概念,笔者觉得不是太合适.这里的Middleware和Java Servlet中的过滤器(Filter)就是一个东西,但是想比之下Filte ...

  6. 解决webservice接口调用报错:java.lang.ClassFormatError: Absent Code ... javax/mail/internet/MimeMultip

    今天使用java axis调用.net发布的webservice接口报了个错,排查半天,感觉代码逻辑没问题,最后发现是jar包冲突!!! 调用接口相关代码: String url="http ...

  7. python课本学习-第五章

    一.列表的概念 1.列表的创建 列表是由一组任意类型的值组合而成的序列,组成列表的值称为元素,每个元素之间用逗号隔开. 列表中的元素是可变的 #列表类似于c++中的数组,数组下标从0开始 list1 ...

  8. 2021-07-21 vue插槽

    说明 为什么要有插槽? 是为了方便优雅地在父组件中向子组件传递向子组件传递dom结构. 代码处理 子组件 该子组件的组件名为ChildComponent: <template> <d ...

  9. Linux驱动开发笔记(二):ubuntu系统从源码编译安装gcc7.3.0编译器

    前言   编译ubuntu驱动之前,发现使用的gcc是7.3.0,而使用apt管理和下载的都无法直接或间接安装gcc7.3.0,于是只能从源码安装gcc7.3.0编译器.   GCC 概述   GCC ...

  10. Java JVM——4.程序计数器

    简介 JVM中的程序计数寄存器(Program Counter Register),Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息,CPU只有把数据装载到寄存器才能够运行. 这 ...