mongoose 数据库操作 - 分页
使用mongoose 加入分页方法,临时还没发现什么更好的方法,我使用的方法是,直接在源代码中加入
找到 node_modules/mongoose/lib/model.js打开这个文件。里面加入这段代码
/**
* author:gtt
* updateTime:2014-5-3
*/
Model.execPageQuery = function find (currentPage,pageSize, conditions, fields, options, callback) {
if ('function' == typeof conditions) {
callback = conditions;
conditions = {};
fields = null;
options = null;
} else if ('function' == typeof fields) {
callback = fields;
fields = null;
options = null;
} else if ('function' == typeof options) {
callback = options;
options = null;
}
//var countLine = 20;// 总行数
//var countPage = (countLine + pageSize-1 )/pageSize;// 总页数
var StartLine = (currentPage -1)*pageSize;
var m = this;
async.parallel([
function(cb) {
m.count({},cb);
},
function(cb) {
if ('function' == typeof conditions) {
m.find({}).limit(pageSize).skip(StartLine).exec(cb);
} else if ('function' == typeof fields) {
m.find(conditions).limit(pageSize).skip(StartLine).exec(cb);
} else if ('function' == typeof options) {
m.find(conditions,fields).limit(pageSize).skip(StartLine).exec(cb);
}else{
m.find(conditions,fields,options).limit(pageSize).skip(StartLine).exec(cb);
}
}
], function(err,rs){ var page = {};//总页数 总条数 集合
if('number' == typeof rs[0]){
page.total = rs[0];
page.rows = rs[1];
}else{
page.total = rs[1];
page.rows = rs[2];
}
callback(err,page);
});
}
调用方法:
var assert = require('assert')
var util=require('util');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = mongoose.Types.ObjectId;
mongoose.connect('mongodb://localhost:8888/test');
mongoose.connection.on('error', function() {
console.error('connection error', arguments);
});
var PersonSchema = new Schema({
name : String
});
var Person = mongoose.model('Person', PersonSchema,'Person');
Person.execPageQuery(1,100,function(err,rel){
console.dir(rel);
});
成天都在实现这样的烂玩意,啥时候自己也搞一套牛逼的。
mongoose 数据库操作 - 分页的更多相关文章
- [ Laravel 5.6 文档 ]laravel数据库操作分页(自定义分页实现和自定义分页样式)
简介 在其他框架中,分页可能是件非常痛苦的事,Laravel 让这件事变得简单.易于上手.Laravel 的分页器与查询构建器和 Eloquent ORM 集成在一起,并开箱提供方便的.易于使用的.基 ...
- mongoose 数据库操作2
mongoose的内置的主要功能解说 除了定义文档结构和你要存储的数据类型外.模式(Schema)还用于下面定义: · Validators (异步和同步) · Defa ...
- mongoose 数据库操作3
Model.find(query, fields, options, callback) Model.find({ 'some.value': 5 }, function (err, docs) { ...
- oracle--序列&视图&索引&视图&可视化操作&分页&数据库备份
--oracle学习内容--oracle的管理系统学习--oracle的数据管理学习--oracle的用户管理--oracle二维表管理--oracle的其他知识 --oracle的序列.视图.索引 ...
- java操作数据库:分页查询
直接上.... 还是用之前的goods表,增加了一些数据 1.实体类Goods // 封装数据 public class Goods { private int gid; private String ...
- [js高手之路]Node.js+jade+mongoose实战todolist(分页,ajax编辑,删除)
该系列文章索引: [js高手之路]node js系列课程-创建简易web服务器与文件读写 [js高手之路]node js系列课程-图解express+supervisor+ejs用法 [js高手之路] ...
- phpcms v9 中的数据库操作函数
1.查询 $this->select($where = '', $data = '*', $limit = '', $order = '', $group = '', $key='') 返回 ...
- C# ACCESS数据库操作类
这个是针对ACCESS数据库操作的类,同样也是从SQLHELPER提取而来,分页程序的调用可以参考MSSQL那个类的调用,差不多的,只是提取所有记录的数量的时候有多一个参数,这个需要注意一下! usi ...
- phpcms v9 数据库操作函数
表明默认当前load_model('xxxx')模块所在表名xxxx 若要指定表名 则:操作在mysql.class.php中$this->db->select(...) 1.查询 $ ...
随机推荐
- TCP/IP笔记 三.运输层(3)——TCP超时重传算法
TCP 每发送一个报文段,就对这个报文段设置一次计时器.只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段 1. 平均往返时延RTT 往返时延:一个报文段发出的时间,以及收到相应的确认报文 ...
- 分区 Service Bus 队列和主题
编辑人员注释:本文章由 Windows Azure Service Bus 团队的二级项目经理 Ruppert Koch 撰写. 上周,Microsoft 发布了 Azure SDK 2.2 和 Se ...
- HDOJ 1003 Max Sum(线性dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 思路分析:该问题为最大连续子段和问题,使用动态规划求解: 1)最优子结构:假设数组为A[0, 1 ...
- Google Play和基于Feature的过滤 —— Feature 参考手册
翻译自 Features Reference 下表列出了软/硬件Feature和权限的参考信息,它们被用于GooglePlay. 硬件feature 下面列出了被大多数当前发布的平台所支持的硬件功能描 ...
- 浅谈CSS布局
在No.4中谈及了下盒子模型,引出布局模型 1.布局模型有三类: 1)流动模型 flow(默认) 2)浮动模型 float 3)层模型 layer 2.文档流 :指的是文本沿着从左到右的方向展开 ...
- 解决Windows 7下IE11无法卸载、无法重新安装,提示安装了更新的IE版本
2013年12月14日 iefans 有用户反馈在Windows 7系统上安装IE11时发现安装程序似乎出了问题,等待了很长时间都没有响应之后就断开了电脑的电源.之后IE11浏览器虽然能使用,却无法安 ...
- VC++6.0打开文件出错的解决办法
1.下载http://support.microsoft.com/kb/241396里面的一个叫FileTool.exe的文件并解压,解压后是一个vc工程,用vc6.0打开工程,编译,得到FileTo ...
- [LeetCode]题解(python):017-Letter Combinations of a Phone Number
题目来源: https://leetcode.com/problems/letter-combinations-of-a-phone-number/ 题意分析: 这道题是输入一段数字字符digits, ...
- poj 1430 第二类斯特林数
1 #include <iostream> #include <cmath> #include <algorithm> using namespace std; i ...
- Qt 技巧: 解决未解析的SSL问题
因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作: 需要安装OpenSSL库: 1.首先打开http://slproweb.com/product ...