NodeJs操作MongoDB之分页功能与常见问题

一,方法介绍

1,聚合操作之count

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

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

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

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

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

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

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

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

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

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

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

 # limit()中number值为空时代表全部查出
db.User.find().limit() #读取的条数
 # 常用在分页方法中
# 查询User集合中,跳过前两条记录,每页一条记录
> 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,接口调用,返回的结果集如下:

三,常见问题

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.

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

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

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

NodeJs操作MongoDB之分页功能与常见问题的更多相关文章

  1. NodeJs操作MongoDB之多表查询($lookup)与常见问题

    NodeJs操作MongoDB之多表查询($lookup)与常见问题 一,方法介绍 aggregate()方法来对数据进行聚合操作.aggregate()方法的语法如下 1 aggregate(ope ...

  2. nodejs操作mongodb

    一.下载地址 https://www.mongodb.com/download-center#community 二.控制台操作mongodb 1.安装完后添加环境变量. 2.在某个根目录下新建dat ...

  3. nodejs 操作mongodb, 增删改查

    很久没有学node了,之前书看了一半,今天继续学发现版本问题很坑爹,按书例子执行一堆错误.想学nodejs操作db,百度半天,一堆sb写神马鸟玩儿?简简单单写一大堆还运行不了的.需要代码也是看别人写的 ...

  4. koa 基础(二十一)nodejs 操作mongodb数据库 --- 查询数据

    1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...

  5. koa 基础(二十)nodejs 操作mongodb数据库 --- 新增数据

    1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...

  6. NodeJS操作MongoDB数据库

    一.node.js对于mongodb的基本操作 1.数据库的开机 首先我们要先对数据库进行开机的操作,建立一个文件夹用于存放数据库文档.如D:\mongo,接下去在cmd当中键入命令-> mon ...

  7. nodejs操作mongodb数据库封装DB类

    这个DB类也算是我经历了3个实际项目应用的,现分享出来,有需要的请借鉴批评. 上面的注释都挺详细的,我使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关 ...

  8. 二十六、Nodejs 操作 MongoDb 数据库

    一. 在 Nodejs 中使用 Mongodb 前面的课程我们讲了用命令操作 MongoDB,这里我们看下如何用 nodejs 来操作数据库需要引包: npm install mongodb --sa ...

  9. 70.nodejs操作mongodb

    转自:https://www.cnblogs.com/whoamme/p/3467374.html 首先安装nodejs mongodb npm install mongodb var mongodb ...

随机推荐

  1. HandlerInterceptor拦截实现对PathVariable变量的读取

    Http请求拦截作用 拦截后可以修改请求体 拦截后可以作一些其它统一的操作 问题提出 对于很多时间需要拦截很多Http请求,然后去获取一些参数,这些参数可能是querystring串,也可能是路由上的 ...

  2. SQL优化 MySQL版 - 索引分类、创建方式、删除索引、查看索引、SQL性能问题

    SQL优化 MySQL版  - 索引分类.创建方式.删除索引.查看索引.SQL性能问题 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 索引分类 单值索引 单的意思就是单列的值,比如说有 ...

  3. Java——IO系统概览

    前言 对程序语言的设计者来说,创建一个好的输入/输出(IO)系统是一项艰难的任务.这艰难主要来自于要涵盖I/O的所有可能性.不仅存在各种I/O源端和想要与之通信的接收端(源端/接收端:文件.控制台和网 ...

  4. asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用

    摘要:上篇写了如何搭建一个简单项目框架的上部分,讲了关于Dal和Bll之间解耦的相关知识,这篇来把后i面的部分说一说. 上篇讲到DbSession,现在接着往下讲. 首先,还是把一些类似的操作完善一下 ...

  5. jQuery获取或设置元素的宽度和高度

    jQuery获取或设置元素的宽度和高度: 可使用以下3种方法: 1,jQuery width() 和 height() 方法: 2,innerWidth() 和 innerHeight() 方法: 3 ...

  6. Java 合并、拆分PDF文档

    处理PDF文档时,我们可以通过合并的方式,来任意组几个不同的PDF文件或者通过拆分将一个文件分解成多个子文件,这样的好处是对文档的存储.管理很方便.下面将通过Java程序代码介绍具体的PDF合并.拆分 ...

  7. 调用链监控 CAT 之 入门

    简介 CAT 是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,基本接入了美团上海所有核心应用.目前在中间件(MVC.RPC.数据库.缓存等)框架中得到广泛应用,为美团各业务线提供系统的性 ...

  8. 2015年第六届蓝桥杯javaB组 试题 答案 解析

    1.三角形面积 如图1所示.图中的所有小方格面积都是1. 那么,图中的三角形面积应该是多少呢? 请填写三角形的面积.不要填写任何多余内容或说明性文字. ##### 答案 : 28   ### 2.立方 ...

  9. Ext.isIterable

    Ext.isIterable用于判断传入的参数是否为可迭代的 在这4种情况下,函数返回true 1:数组2:函数参数arguments3:HTML collections : NodeList4:HT ...

  10. Java:配置环境(Mac)——JDK

    1.下载JDK 官网 打开后,直接下载最新版本. 选择dmg文件下载 2.开始安装,一直下一步. 3.打开终端,查询安装路径:/usr/libexec/java_home,复制备用. 4.配置Java ...