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. Vue.js-07:第七章 - Vue 实例的生命周期

    一.前言  在之前的 Vue 学习中,我们在使用 Vue 时,都会创建一个 Vue 的实例,而每个 Vue 实例在被创建时都要经过一系列的初始化过程.例如,需要设置数据监听.编译模板.将实例挂载到 D ...

  2. .NET Core微服务之基于Steeltoe使用Hystrix熔断保护与监控

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 =>  Steeltoe目录快速导航: 1. 基于Steeltoe使用Spring Cloud Eureka 2. 基于Steelt ...

  3. java锁与监视器概念 为什么wait、notify、notifyAll定义在Object中 多线程中篇(九)

    在Java中,与线程通信相关的几个方法,是定义在Object中的,大家都知道Object是Java中所有类的超类 在Java中,所有的类都是Object,借助于一个统一的形式Object,显然在有些处 ...

  4. Dapper的基本 理论 知识

    简述 Dapper是一个轻量级的ORM工具:ORM框架的核心思想是对象关系映射,ORM是将表与表之间的操作,映射成对象和对象之间的操作,就是通过操作实体类来达到操作表的目的.从数据库提取的数据会自动按 ...

  5. C# 反射 判断类的延伸类型

    判断类型是否被继承.实现 1.判断是否实现了指定接口 添加测试类: public class TestClass2 : TestClass1 { } public class TestClass1 : ...

  6. Servlet--创建和配置Servlet

    在web开发中,一般由Servlet进行数据流的控制,并通过HttpServletResponse对象对请求做出响应.创建的Servlet必须继承HttpServlet类,并实现doGet()和doP ...

  7. 【升鲜宝】生鲜配送管理系统_升鲜宝 V2.0 按客户商品分类分开打印配送与按客户商品分类导出相关订单商品相关说明(一)

    [升鲜宝]生鲜配送管理系统_升鲜宝 V2.0 按[客户]的商品分类分开打印(配送单)与按[客户]商品分类[对账单]导出相关销售订单商品功能相关说明(一) 业务场景概述与痛点 1.中小学校食堂的客户,每 ...

  8. 用Python将绝对URL替换成相对URL的代码

    下面的内容内容是关于用Python将绝对URL替换成相对URL的内容,应该是对码农有些用途. #!/usr/bin/env python### author : cold night# email : ...

  9. Active Directory Replication(复制)

    KCC(The Knowledge Consistency Checker)知识一致性检查器是一个内置的程序,在所有与管理器上运行,为林创建复制拓扑.默认,KCC15分钟间隔运行一次,根据当时存活的最 ...

  10. 【shell基础】数学计算

    #!/bin/bash #4.4.sh s= #定义一个求和变量,初值为0. t=`**$` #用expr改变运算顺序,求x的y次方. t=$[t*] #t乘以3. s=$[s+t] #结果相加. t ...