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中的非阻塞方法介绍
Jun 05 NodeJs
将nodejs打包工具整合到鼠标右键的方法
May 11 NodeJs
Nodejs极简入门教程(二):定时器
Oct 25 NodeJs
轻松创建nodejs服务器(7):阻塞操作的实现
Dec 18 NodeJs
Nodejs学习笔记之Stream模块
Jan 13 NodeJs
Nodejs的express使用教程
Nov 23 NodeJs
windows 下安装nodejs 环境变量设置
Feb 02 NodeJs
详解nodejs微信公众号开发——3.封装消息响应模块
Apr 10 NodeJs
详解nodejs微信公众号开发——6.自定义菜单
Apr 13 NodeJs
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
Nov 01 NodeJs
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
Feb 02 NodeJs
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
Apr 29 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中date()日期函数有关参数整理
2011/07/19 PHP
ThinkPHP页面跳转success与error方法概述
2014/06/25 PHP
PHP获取指定月份第一天和最后一天的方法
2015/07/18 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
2011/10/19 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
详解vue渲染函数render的使用
2017/12/12 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
[33:09]完美世界DOTA2联赛循环赛 Forest vs DM BO2第二场 10.29
2020/10/29 DOTA
Python自动连接ssh的方法
2015/03/07 Python
python类装饰器用法实例
2015/06/04 Python
Python读取mat文件,并转为csv文件的实例
2018/07/04 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
python用for循环求和的方法总结
2019/07/08 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
优秀干部获奖感言
2014/01/31 职场文书
法律进企业活动方案
2014/03/04 职场文书
租房协议书怎么写
2014/04/10 职场文书
留学经费担保书
2014/05/12 职场文书
普通党员自我剖析材料
2014/10/07 职场文书
全国助残日活动总结
2015/05/11 职场文书
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫
Android开发 使用文件储存的方式保存QQ密码
2022/04/24 Java/Android
Windows server 2012 R2 安装IIS服务器
2022/04/29 Servers