美文网首页
nodejs封装MongoDB增删查改

nodejs封装MongoDB增删查改

作者: 赖次Go | 来源:发表于2020-02-16 20:53 被阅读0次

    使用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方法一直,单词替换即可

    感谢使用!

    相关文章

      网友评论

          本文标题:nodejs封装MongoDB增删查改

          本文链接:https://www.haomeiwen.com/subject/opimfhtx.html