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

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 使用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 })
}


最后


完整源码地址移步这里


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
8天前
|
SQL 存储 关系型数据库
数据库开发之图形化工具以及表操作的详细解析
数据库开发之图形化工具以及表操作的详细解析
25 0
|
JavaScript 关系型数据库 MySQL
❤Nodejs 第六章(操作本地数据库前置知识优化)
【4月更文挑战第6天】本文介绍了Node.js操作本地数据库的前置配置和优化,包括处理接口跨域的CORS中间件,以及解析请求数据的body-parser、cookie-parser和multer。还讲解了与MySQL数据库交互的两种方式:`createPool`(适用于高并发,通过连接池管理连接)和`createConnection`(适用于低负载)。
20 0
|
1月前
|
SQL 数据库连接 数据库
你不知道ADo.Net中操作数据库的步骤【超详细整理】
你不知道ADo.Net中操作数据库的步骤【超详细整理】
16 0
|
1月前
|
SQL 缓存 PHP
PHP技术探究:优化数据库查询效率的实用方法
本文将深入探讨PHP中优化数据库查询效率的实用方法,包括索引优化、SQL语句优化以及缓存机制的应用。通过合理的优化策略和技巧,可以显著提升系统性能,提高用户体验,是PHP开发者不容忽视的重要议题。
|
1月前
|
关系型数据库 MySQL 数据库
rds安装数据库客户端工具
安装阿里云RDS的数据库客户端涉及在本地安装对应类型(如MySQL、PostgreSQL)的客户端工具。对于MySQL,可选择MySQL Command-Line Client或图形化工具如Navicat,安装后输入RDS实例的连接参数进行连接。对于PostgreSQL,可以使用`psql`命令行工具或图形化客户端如PgAdmin。首先从阿里云控制台获取连接信息,然后按照官方文档安装客户端,最后配置客户端连接以确保遵循安全指引。
95 1
|
1天前
|
NoSQL MongoDB
MongoDB代码操作
MongoDB代码操作
|
7天前
|
NoSQL MongoDB 数据库
MongoDB数据恢复—MongoDB数据库文件被破坏的数据恢复案例
服务器数据恢复环境: 一台Windows Server操作系统服务器,服务器上部署MongoDB数据库。 MongoDB数据库故障&检测: 工作人员在未关闭MongoDB数据库服务的情况下,将数据库文件拷贝到其他分区。拷贝完成后将原MongoDB数据库所在分区进行了格式化操作,然后将数据库文件拷回原分区,重新启动MongoDB服务,服务无法启动。
|
10天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
138 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
21天前
|
存储 关系型数据库 MySQL
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
|
28天前
|
缓存 NoSQL 关系型数据库
【MongoDB】MongoDB更新操作时是否立刻fsync到磁盘?
【4月更文挑战第2天】【MongoDB】MongoDB更新操作时是否立刻fsync到磁盘?