NodeJs操作MongoDB之分页功能与常见问题
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,如下:
{
/**
* 连写查询 查询多条数据
* @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之分页功能与常见问题的更多相关文章
- NodeJs操作MongoDB之多表查询($lookup)与常见问题
NodeJs操作MongoDB之多表查询($lookup)与常见问题 一,方法介绍 aggregate()方法来对数据进行聚合操作.aggregate()方法的语法如下 1 aggregate(ope ...
- nodejs操作mongodb
一.下载地址 https://www.mongodb.com/download-center#community 二.控制台操作mongodb 1.安装完后添加环境变量. 2.在某个根目录下新建dat ...
- nodejs 操作mongodb, 增删改查
很久没有学node了,之前书看了一半,今天继续学发现版本问题很坑爹,按书例子执行一堆错误.想学nodejs操作db,百度半天,一堆sb写神马鸟玩儿?简简单单写一大堆还运行不了的.需要代码也是看别人写的 ...
- koa 基础(二十一)nodejs 操作mongodb数据库 --- 查询数据
1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...
- koa 基础(二十)nodejs 操作mongodb数据库 --- 新增数据
1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...
- NodeJS操作MongoDB数据库
一.node.js对于mongodb的基本操作 1.数据库的开机 首先我们要先对数据库进行开机的操作,建立一个文件夹用于存放数据库文档.如D:\mongo,接下去在cmd当中键入命令-> mon ...
- nodejs操作mongodb数据库封装DB类
这个DB类也算是我经历了3个实际项目应用的,现分享出来,有需要的请借鉴批评. 上面的注释都挺详细的,我使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关 ...
- 二十六、Nodejs 操作 MongoDb 数据库
一. 在 Nodejs 中使用 Mongodb 前面的课程我们讲了用命令操作 MongoDB,这里我们看下如何用 nodejs 来操作数据库需要引包: npm install mongodb --sa ...
- 70.nodejs操作mongodb
转自:https://www.cnblogs.com/whoamme/p/3467374.html 首先安装nodejs mongodb npm install mongodb var mongodb ...
随机推荐
- 【Netty】(5)源码 Bootstrap
[Netty]5 源码 Bootstrap 上一篇讲了AbstractBootstrap,为这篇做了个铺垫. 一.概述 Bootstrap 是 Netty 提供的一个便利的工厂类, 我们可以通过它来完 ...
- [macOS开发.NET Core] 一个简单的WEB程序
上一篇咱们提到了在macOS下选进行开发. 咱们已经把工具准备完成了. 现在咱们做一个简单的DEMO 创建WEB程序  之前咱们已经创建过WEB程序,并且成功的运行过数据 现在咱们创建一个页面,并显 ...
- Asp.NetCore轻松学-业务重点-实现一个简单的手机号码验证
前言 本文纯干货,直接拿走使用,不用付费.在业务开发中,手机号码验证是我们常常需要面对的问题,目前市场上各种各样的手机号码验证方式,比如正则表达式等等,本文结合实际业务场景,在业务级别对手机号 ...
- 1.1专题介绍「深入浅出ASP.NET Core系列」
大家好,我是IT人张飞洪,专注于.NET平台十年有余. 工作之余喜欢阅读和写作,学习的内容包括数据结构/算法.网络技术.Linux系统原理.数据库技术原理,设计模式.前沿架构.微服务.容器技术等等…… ...
- 【大数据安全】Apache Kylin 安全配置(Kerberos)
1. 概述 本文首先会简单介绍Kylin的安装配置,然后介绍启用Kerberos的CDH集群中如何部署及使用Kylin. Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop/Spa ...
- Unity MMORPG游戏开发教程(一)——初识Unity
五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以C#为介绍语言,基于Unity2017.4.x. 一.环境搭建 我使用的是Unity+VSCode,用的是mac系统,windows的自己 ...
- DSAPI 截取被遮挡的窗口图像
Me.BackgroundImage=DSAPI.控件.截取窗体或控件图像(目标窗口句柄) 支持截取被覆盖或隐藏的窗口.
- C#属性标记Order执行顺序备忘录
部分Attribute有实现IOrderedFilter,其执行顺序机制例子: /// <summary> /// 密码修改 /// </summary> /// <pa ...
- 第一册:Lesson 123.
原文:A trip to Australia. question:Who is the man with the beard? Look ,Scott.This is a photograph I t ...
- 第一册:lesson 121.
原文:The man in a hat. question:Why didn't Caroline recognize the customer straight away? I bought tw ...