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. IdentityServer4 中文文档与实战

    写在前面 写于2018.9.12 我研究 IdentityServer4 是从.net core 1.1的时候开始的,那时候国内的中文资料比较少,我都是按照官方文档来研究的,整理成了笔记.这个系列文档 ...

  2. LogcatHelperDemo【应用log信息保存成本地文件】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 简单记录下LogcatHelper的使用,并对原有代码进行了修改[因为保存到应用内的目录中不需要申请权限,所以去掉保存到SD的功能- ...

  3. async/await使用深入详解

    async和await作为异步模型代码编写的语法糖已经提供了一段时间不过一直没怎么用,由于最近需要在BeetleX webapi中集成对Task方法的支持,所以对async和await有了深入的了解和 ...

  4. 用Python教你微信防撤回(文本、图片、语音、视频、名片等...)

    大家在使用微信过程中,有时候消息还没看到,就被撤回了.毕竟好奇心大家都有,明知到消息被撤回了,就更想去看一下是什么内容心里想着万一是女神给我表白了呢.. 今天就用Python来做个微信防撤回的小功能. ...

  5. JVM上的响应式流 — Reactor简介

    强烈建议先阅读下JVM平台上的响应式流(Reactive Streams)规范,如果没读过的话. 官方文档:https://projectreactor.io/. 响应式编程 作为响应式编程方向上的第 ...

  6. 【Golang笔记】Golang工具包Cobra安装记录

    0.环境信息 系统:Win10_x64 Go版本:go version go1.8.1 windows/amd64 Git版本:git version 2.17.0.windows.1 1.安装Go运 ...

  7. 利用StackExchange.Redis和Log4Net构建日志队列

    简介:本文是一个简单的demo用于展示利用StackExchange.Redis和Log4Net构建日志队列,为高并发日志处理提供一些思路. 0.先下载安装Redis服务,然后再服务列表里启动服务(R ...

  8. SQLServer事务在C#当中的应用

    1:事务是什么 事务指的是一系列SQL操作的逻辑工作单元,,要么完全地执行,要么完全地不执行. 一个逻辑工作单元必须有4个属性,原子性(Atomic).一致性(Consistent).隔离型(Isol ...

  9. Java开发笔记(八十五)通过字符流读写文件

    前面介绍了文件的信息获取.管理操作,以及目录下的文件遍历,那么文件内部数据又是怎样读写的呢?这正是本文所要阐述的内容.File工具固然强大,但它并不能直接读写文件,而要借助于其它工具方能开展读写操作. ...

  10. 《PHP制作个人博客》之四:分类添加及前端导航数据用php动态调取

    大家好,今天我们接着上一节的全栈营销个人博客制作,上一节我们把博客的模板给加载运行起来.今天我们主要讲解后台模板分类的添加,后台导航的添加,及前台导航的动态调用.一个好的博客,导航很重要,导航就像你网 ...