nodeJs 解决 mongodb TypeError: Cannot read property 'n' of undefined问题

这个问题一般存在于,mongodb集合为空的时候,去查询集合会报错,暂时的解决办法是判断集合是否为null
借助col.find(where).next(function (err, doc) { 
    doc 返回null说明为集合空
})
这是婉转的解决方法,也不知道对性能有没有影响;欢迎评论指正。下面给个例子

//分页查询
exports.findPage=function (collection,where,page=1,pageNum=30) {
    return new Promise(function (resolve, reject) {
      db.then(db=>{
          let col=db.collection(collection);

          col.find(where).next(function (err, doc) {
              if(err){
                  reject1('数据库查询错误');
                  return false
              }
              //不为null 的时候正常查询返回需要的数据
              if(doc){
                  let list=new Promise((resolve1, reject1) => {
                      let find=col.find(where);
                     // 分页查询
                      find.skip((page-1)*pageNum).limit(pageNum).toArray((err,arr)=>{
                          if(err){
                              reject1('数据查询失败');
                              return false
                          }
                          resolve1(arr)
                      })

                  });
                  //查询数据库集合元素的总数
                  let count=new Promise((resolve1, reject1) => {
                      col.countDocuments(where,function (err, res) {
                          if(err){
                              //logs.dbErr(logUrl,timeFormat()+'数据长度查询失败'+err+'\n');
                              reject1('数据长度查询失败');
                              return false
                          }
                          resolve1(res);
                      })
                  });
                  //处理需要的数据格式
                  Promise.all([list,count]).then(function (result) {
                      let arr=result[0];
                      let count=result[1];
                      resolve({arr,count});
                  }).catch(err=>{
                      reject(err)
                  })

              }else {
                  //null 直接返回需要的数据初始值
                  resolve({
                      count:0,
                      arr:[]
                  })
              }
          });

      })
    })
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值