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开发微信公众号后台服务实例
Sep 03 NodeJs
轻松创建nodejs服务器(6):作出响应
Dec 18 NodeJs
使用DNode实现php和nodejs之间通信的简单实例
Jul 06 NodeJs
win系统下nodejs环境安装配置
May 04 NodeJs
使用vs code开发Nodejs程序的使用方法
Sep 21 NodeJs
使用nodeJs来安装less及编译less文件为css文件的方法
Nov 20 NodeJs
nodejs实现连接mongodb数据库的方法示例
Mar 15 NodeJs
nodejs实现超简单生成二维码的方法
Mar 17 NodeJs
详解webpack打包nodejs项目(前端代码)
Sep 19 NodeJs
nodejs 使用nodejs-websocket模块实现点对点实时通讯
Nov 28 NodeJs
NodeJs 模仿SIP话机注册的方法
Jun 21 NodeJs
nodejs利用readline提示输入内容实例代码
Jul 15 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实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
php设计模式之单例模式代码
2016/06/11 PHP
php 数据结构之链表队列
2017/10/17 PHP
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
解决Jquery鼠标经过不停滑动的问题
2014/03/03 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
js调用刷新界面的几种方式
2017/05/03 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
Vant picker 多级联动操作
2020/11/02 Javascript
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
python学习之hook钩子的原理和使用
2018/10/25 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
用canvas显示验证码的实现
2020/04/10 HTML / CSS
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
土建施工员岗位职责
2014/07/16 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
2015年护士节慰问信
2015/03/23 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python
灵能百分百第三季什么时候来?
2022/03/15 日漫