NodeJs操作MongoDB教程之分页功能以及常见问题


Posted in NodeJs onApril 09, 2019

一,方法介绍

 1,聚合操作之count

count()方法可以查询统计符合条件的集合的总数

1 db.User.count(<query>) // 此方法等价于 db.User.find(<query>).count()

在分布式集合中,会出现计算错误的情况,这个时候推荐使用aggregate;

 2,find() 方法以非结构化的方式来显示所有文档。

1 db.User.find();//相当于:select* from User;

3,exec() 方法用于检索字符串中的正则表达式的匹配。(javascript方法)

4,sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

1 升序:db.User.find().sort({CreateTime: 1});
2 降序:db.User.find().sort({CreateTime: -1});

5,skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

1 db.User.find().skip(2)//跳过2条

6,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。一般与skip连用

1 # limit()中number值为空时代表全部查出
2 db.User.find().limit(2) #读取的条数
1 # 常用在分页方法中
2 # 查询User集合中,跳过前两条记录,每页一条记录
3 > db.User.find().skip(2).limit(1)

二,封装与接口抛出

2.1,分页查询

  1,根据查询条件获取总条数,使用count({},callback)方法

/**
 * 根据条件获取有多少条数据 文档数
 * @param table_name 表名
 * @param conditions 查询条件 {a:1, b:2}
 * @param callback 回调方法
 */
MongoDbAction.getTotal = function (table_name, conditions, callback) {
 var node_model = this.getConnection(table_name);
 if (!node_model || node_model.message) {
 if (callback) callback(1, node_model)
 } else {
 node_model.find(conditions)
  .count({})
  .exec(function (err, total) {
  if (err) {
   if (callback) callback(err);
  } else {
   if (callback) callback(null, total);
  }
  });
 }
};

2,实现连写查询

 (1)这个可以用来做分页,表示获取从第1条(第1条记录序号为0)记录开始的10条记录.类似与Mysql的limit 0, 10,如下:

{

 limit:10,//pageSize
 skip:0//page:skip+1
}

(2)按某个字段升序(1)降序(-1),如下 按照创建时间进行降序排列

sort: {CreateTime: -1},

(3)代码连写查询实现:

/**
 * 连写查询 查询多条数据
 * @param table_name 表名
 * @param conditions 查询条件 {a:1, b:2}
 * @param options 选项:{fields: "a b c", sort: {time: -1}, limit: 10}
 * @param callback 回调方法
 */
MongoDbAction.whereCondition = function (table_name, conditions, options, callback) {
 var node_model = this.getConnection(table_name);
 if (!node_model || node_model.message) {
  if (callback) callback(1, node_model)
 } else {
  node_model.find(conditions)
   .select(options.fields || '')
   .sort(options.sort || {})//排序 //按某个字段升序(1)降序(-1)
   .skip(options.skip || 0)//跳过的条数
   .limit(options.limit || {})//查询几条
   .exec(function (err, res) {
    if (err) {
     if (callback) callback(err);
    } else {
     if (callback) callback(null, res);
    }
   });
 }
};

3,根据所传的参数实现分页查询

抛出分页查询的接口

//连写查询数据 包括分页 获取总条数
router.put('/user/getSingleAndManyData', function (req, res) {
 var tableName = req.body.tableName;//'User'
 var IsEnable = req.body.IsEnable;
 var limit = req.body.pageSize;
 var sort = req.body.sort;
 var skip = req.body.page;
 let conditions = {
  IsEnable
 }
 let options = {
  sort: {CreateTime: sort},//排序
  limit,//pageSize
  skip:(limit*(skip-1))//page
 }
 // let options = {
 //  sort: {CreateTime: -1},//按某个字段升序(1)降序(-1)
 //  limit:10,
 //  skip:(limit*(skip-1))//skip=1=> skip:0
 // }
 // 这个可以用来做分页,表示获取从第1条(第1条记录序号为0)记录开始的10条记录.类似与Mysql的limit 0, 10
 let data = {
  httpCode: 200,
  message: "查询成功!",
  status: 1,
  data: null,
  page:skip,
  pageSize:limit
 }
 
 MongoDbAction.getTotal(tableName,conditions, function (err, total) {
  if (err) {
   data.total=0
   data.status = 0
   data.message = "未查询到数据!"
   data.data = null
   res.status(data.httpCode).json(data);
  } else {
   MongoDbAction.whereCondition(tableName,conditions,options, function (err, result) {
    if (!err) {
     data.total=total
     data.data = result
     res.status(data.httpCode).json(data);
    } else {
     data.total=0
     data.status = 0
     data.message = "未查询到数据!"
     data.data = result
     res.status(data.httpCode).json(data);
    }
   });
  }
 });
 
})

4,接口调用,返回的结果集如下:

NodeJs操作MongoDB教程之分页功能以及常见问题

三,常见问题

1,连接警告

警告:(node:204) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.

1 mongoose.connect(dbURL);// 连接数据库 存在警告

NodeJs操作MongoDB教程之分页功能以及常见问题

解决办法:连接配置添加: { useNewUrlParser: true }

1 mongoose.connect(dbURL,{useNewUrlParser:true});//连接数据库

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

NodeJs 相关文章推荐
PHP和NodeJs开发的应用如何共用Session
Apr 16 NodeJs
nodejs简单实现操作arduino
Sep 25 NodeJs
NodeJS测试框架mocha入门教程
Mar 28 NodeJs
NodeJS实现微信公众号关注后自动回复功能
May 31 NodeJs
Mac 安装 nodejs方法(图文详细步骤)
Oct 30 NodeJs
nodejs+mongodb+vue前后台配置ueditor的示例代码
Jan 02 NodeJs
nodejs简单读写excel内容的方法示例
Mar 16 NodeJs
详解nodejs通过响应回写的方式渲染页面资源
Apr 07 NodeJs
nodejs中函数的调用实例详解
Oct 31 NodeJs
详解NodeJS Https HSM双向认证实现
Mar 12 NodeJs
nodejs实现日志读取、日志查找及日志刷新的方法分析
May 20 NodeJs
nodejs各种姿势断点调试的方法
Jun 18 NodeJs
Nodejs核心模块之net和http的使用详解
Apr 02 #NodeJs
Nodejs中的require函数的具体使用方法
Apr 02 #NodeJs
NodeJs之word文件生成与解析的实现代码
Apr 01 #NodeJs
详解nodejs http请求相关总结
Mar 31 #NodeJs
详解Nodejs get获取远程服务器接口数据
Mar 26 #NodeJs
nodejs微信开发之自动回复的实现
Mar 17 #NodeJs
nodejs微信开发之接入指南
Mar 17 #NodeJs
You might like
一个高ai的分页函数和一个url函数
2006/10/09 PHP
php fsockopen伪造post与get方法的详解
2013/06/14 PHP
深入php内核之php in array
2015/11/10 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
javascript模仿msgbox提示效果代码
2008/06/10 Javascript
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
详解JS 比较两个Json对象的值是否相等的实例
2013/11/20 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
基于jQuery对象和DOM对象和字符串之间的转化实例
2017/08/08 jQuery
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
2017/09/25 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
vuex state及mapState的基础用法详解
2018/04/19 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
python抓取网页中的图片示例
2014/02/28 Python
Python列表生成器的循环技巧分享
2015/03/06 Python
详细分析python3的reduce函数
2017/12/05 Python
基于python中theano库的线性回归
2018/08/31 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
python实现电子书翻页小程序
2019/07/23 Python
基于python实现学生信息管理系统
2019/11/22 Python
Python3 利用face_recognition实现人脸识别的方法
2020/03/13 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
中专自我鉴定
2014/02/05 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
高校优秀辅导员事迹材料
2014/05/07 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
大学毕业生自我评价
2015/03/02 职场文书
白银帝国观后感
2015/06/17 职场文书
百日宴上的祝酒词
2015/08/10 职场文书