nodejs封装MongoDB增删查改

使用nodejs作为后端服务搭建web服务的话,MongoDB数据库为首选,本篇主要是为了方便node服务CURD而封装的简单方法集合,适合新手使用理解MongoDB在nodejs中的应用

本篇暂不介绍MongoDB的安装教程,请移步:https://juejin.im/post/5d525b1af265da03b31bc2d5

Mogodb介绍

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

mongodb 官方文档

https://docs.mongodb.com/manual/crud/

插件代码

import Mongodb from 'mongodb'
const MongoClient = Mongodb.MongoClient
const url = 'mongodb://@127.0.0.1:27017' // 数据库地址

/**
* @method { function } find , update , insert , remove - CURD方法
*
* @params { object } opt 统一传参 
*
* @params { string } db - 必选,db name
* @params { string } table - 必选,collection name
* @params { object } query - 可选,使用查询操作符指定查询条件
* @params { object } project - 可选,使用投影操作符指定返回的键
* @params { object } sort - 可选,通过参数指定排序的字段
* @params { number } limite - 可选,读取指定数量的数据记录
* @params { number } skip - 可选,读取指定数量的数据
*
* @method { function } update  方法
* @params { object } update - 必选,更新操作语句
*/

class Database {
    connect () {
        return new Promise(( resolve , reject ) => MongoClient.connect(
            url ,
            { useNewUrlParser : true } ,
            ( error , db ) => error ? reject( error ) : resolve( db )
        ))
    }
    
    find ( opt ) {
        let db = await this.connect()
        let result
        if ( opt.skip >= 0 || opt.limit >= 0 ) 
        {
            let total = await new Promise(
                (resolve , reject ) => db
                    .db( opt.db )
                    .collection( opt.table )
                    .find( opt.query )
                    .project( opt.project )
                    .count(
                        ( error , result ) => error ? reject( error ) : resolve( result )
                    )
            )

            let list = await new Promise(
                ( resolve , reject ) => db
                    .db( opt.db )
                    .collection( opt.table )
                    .find( opt.query )
                    .sort( opt.sort )
                    .project( opt.project )
                    .limit( opt.limit )
                    .skip( opt.skip * opt.limit )
                    .toArray (
                        ( error , result ) => error ? reject( error ) : resolve( result )
                    )
            )

            result = {
                list ,
                total , 
            }
        }
        else 
            result = await new Promise(
                (resolve , reject ) => db
                    .db( opt.db )
                    .collection( opt.table )
                    .find( opt.query )
                    .sort( opt.sort )
                    .project( opt.project )
                    .toArray(
                        ( error , result ) => error ? reject( error ) : resolve( result )
                    )
            )

        db.close()
        return result;
    }
    
    insert ( opt ) { //插入方法
        let db = await this.connect()
        let result = await new Promise(
            ( resolve , reject ) => db
                .db( opt.db )
                .collection( opt.table )
                .insertOne(
                    opt.query , 
                    ( error , result ) => error ? reject( error ) : resolve( result )
                ) 
        )
        db.close()
        return result
    }
    
    update ( opt ) { //更新方法
        let db = await this.connect()

        let result = await new Promise(
            ( resolve , reject ) => db
                .db( opt.db )
                .collection( opt.table )
                .updateOne(
                    opt.query,
                    { $set : opt.update },
                    ( error : any , result : any ) => error ? reject( error ) : resolve( result )
                )
        )
        db.close()
        return result 
    }
    
    remove ( opt ) { //删除方法
        let db = await this.connect()

        let result = await new Promise(
            ( resolve , reject ) => db
                .db( opt.db )
                .collection( opt.table )
                .remove(
                    opt.query,
                    ( error , result ) => error ? reject( error ) : resolve( result )
                )
        )
        
        db.close()
        return result 
    }
    
}

另外 MongoDB ObjectId (对象ID) nodejs操作:

const objectId = id => new Mongodb.ObjectId( id )

关于插件用法:

const db = new DataBase()
// find
db.find({
    db : '',
    table : '',
    query : {},
    skip : 3,
    limit : 5,
    project : { '_id' : -1, }
})

//update 更新方法
db.update({
    query : {},
    update : {},
})

//insert 插入方法
db.insert({
    db:'',
    table : '',
    query : {},
})

注意事项

  • e6语法环境需要打包
  • npm引入mongodb
  • 暂时没有用到delete方法,delete方法与remove方法一直,单词替换即可

感谢使用!

推荐阅读更多精彩内容