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 相关文章推荐
Google官方支持的NodeJS访问API,提供后台登录授权
Jul 29 NodeJs
轻松创建nodejs服务器(9):实现非阻塞操作
Dec 18 NodeJs
nodejs通过phantomjs实现下载网页
May 04 NodeJs
浅谈NodeJS中require路径问题
May 07 NodeJs
Jquery通过ajax请求NodeJS返回json数据实例
Nov 08 NodeJs
详解nodejs中的process进程
Mar 19 NodeJs
nodejs使用express获取get和post传值及session验证的方法
Nov 09 NodeJs
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
Oct 17 NodeJs
nodejs中函数的调用实例详解
Oct 31 NodeJs
nodejs基础之常用工具模块util用法分析
Dec 26 NodeJs
详解nodejs 开发企业微信第三方应用入门教程
Mar 12 NodeJs
Nodejs封装类似express框架的路由实例详解
Jan 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
PHP4实际应用经验篇(6)
2006/10/09 PHP
SESSION存放在数据库用法实例
2015/08/08 PHP
PDO::rollBack讲解
2019/01/29 PHP
JavaScript 私有成员分析
2009/01/13 Javascript
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
移动Web中图片自适应的两种JavaScript解决方法
2015/06/18 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
详解JavaScript基于面向对象之继承
2015/12/13 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
2016/05/05 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
ES6 Promise对象概念与用法分析
2017/04/01 Javascript
nuxt+axios解决前后端分离SSR的示例代码
2017/10/24 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
Python实现全角半角转换的方法
2014/08/18 Python
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
Python----数据预处理代码实例
2019/03/20 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
2020/01/21 Python
用CSS3实现无限循环的无缝滚动的示例代码
2017/11/01 HTML / CSS
Python中如何定义一个函数
2016/09/06 面试题
中医学专业自荐信范文
2014/04/01 职场文书
授权委托书公证
2014/09/14 职场文书
贫困证明书格式及范文
2014/10/15 职场文书
签订劳动合同通知书
2015/04/16 职场文书
2015年语言文字工作总结
2015/07/23 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
golang中的空接口使用详解
2021/03/30 Python