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 相关文章推荐
nodejs实用示例 缩址还原
Dec 28 NodeJs
Nodejs极简入门教程(二):定时器
Oct 25 NodeJs
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
Dec 30 NodeJs
Nodejs 发送Post请求功能(发短信验证码例子)
Feb 09 NodeJs
Nodejs之TCP服务端与客户端聊天程序详解
Jul 07 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
Nodejs中crypto模块的安全知识讲解
Jan 03 NodeJs
详解NODEJS的http实现
Jan 04 NodeJs
nodejs实现的连接MySQL数据库功能示例
Jan 25 NodeJs
NodeJs 文件系统操作模块fs使用方法详解
Nov 26 NodeJs
nodejs log4js 使用详解
May 31 NodeJs
nodeJS与MySQL实现分页数据以及倒序数据
Jun 05 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
PHP中ob_start函数的使用说明
2013/11/11 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
2017/03/14 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
js将字符串转成正则表达式的实现方法
2013/11/13 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
PHP结合jQuery实现的评论顶、踩功能
2015/07/22 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
JavaScript中removeChild 方法开发示例代码
2016/08/15 Javascript
jquery过滤特殊字符',防sql注入的实现方法
2016/08/17 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
JavaScript进阶(一)变量声明提升实例分析
2020/05/09 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
Python中用max()方法求最大值的介绍
2015/05/15 Python
使用python turtle画高达
2020/01/19 Python
python3将变量写入SQL语句的实现方式
2020/03/02 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
jupyter notebook 的工作空间设置操作
2020/04/20 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
德国50岁以上交友网站:Lebensfreunde
2020/03/18 全球购物
家长对孩子评语
2014/01/30 职场文书
厨师长岗位职责
2014/03/02 职场文书
战略合作协议书范本
2014/04/18 职场文书
小学向国旗敬礼活动方案
2014/09/27 职场文书
绿色校园广播稿
2014/10/13 职场文书
初中优秀学生评语
2014/12/29 职场文书
2016新春团拜会致辞
2015/08/01 职场文书
物业公司管理制度
2015/08/05 职场文书
python xlwt模块的使用解析
2021/04/13 Python
Python一行代码实现自动发邮件功能
2021/05/30 Python
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android