node中封装mongodb

const mongodb = require('mongodb')//引入模块
const mongoCt = mongodb.MongoClient//实例化
//id:ObjectId("5e6f61ac860bf5190058610d") 由于这个数据库的id是这样的 
let objectId = mongodb.ObjectId//用这方法把里面的字符串取出来
//
//连接数据库功能
let open = ({dbname,collection,url='mongodb://localhost:27017'})=>{
//传参 第一个是数据库名 第二个是集合名 第三个是数据库地址 有默认值
    return new Promise((resovle,reject)=>{//利用promise 来解决回调地域
    mongoCt.connect(url,{ useUnifiedTopology: true },(err,client)=>{
        if(!err){//如果链接没有错误执行
            let db = client.db(dbname)//拿到数据库名
            let colloct = db.collection(collection)//拿道数据库里面的集合名字
            resovle({colloct,client})//成功的回调
        }else{
            reject(err)
        }
    })
})

}

//查询集合列表数据
let findlist = ({//传入集合名 数据库名 跳过的条数,限制条数,如何排序,查询的条件
    collection,
    dbname='student'
    ,_skip,_limit,_sort,q
})=>{
    //生成检索条件 这里比如说 要查询用户名包含传入的 q参数
    // let rule = q ? {username:new RegExp(q,"g")} :{} // 条件不能使用 正则/q/ 这里面q获取不到是个字符串而不是变量
    let rule = q ? {username:eval("/"+q+"/")} :{}   //eval可以直接执行里面的代码
    return new Promise((resovle,reject)=>{
        open({dbname,collection})//调用上面的open方法
        .then(({colloct,client})=>{
            colloct.find(rule,{
                skip:(_skip-1)*_limit-0,//跳过几条 这样传参实现了数据分页功能
            limit:_limit-0, //限制查询几条
            // projection:{address:0},//不显示address属性
            sort:{[_sort]:1}//排序  当一个变量是key的时候 用[]包裹
             }).toArray((err,result)=>{
                if(!err &z& result.length>0){
                   resovle({err:0,data:result})
                }else{
                    resovle({err:1,data:'没有数据.....'})
                }
                client.close()
            })
        })
        .catch((err)=>{
            reject({err:1,data:"获取数据失败"})
        })
    })
}

exports.open = open
exports.findlist = findlist

这样就可以在express模块中调用这个查询mongodb的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值