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 数据库操作 - 分页,布布扣,bubuko.com

时间: 05-03

mongoose 数据库操作 - 分页的相关文章

mongoose 数据库操作2

 mongoose的内置的主要功能讲解 除了定义文档结构和你要存储的数据类型外,模式(Schema)还用于以下定义: ·        Validators (异步和同步) ·        Defaults - 默认值 ·        Getters ·        Setters ·        Indexes - 索引 ·        Middleware - 中间件 ·        Methods definition - 方法定义 ·        Statics defin

mongoose 数据库操作3

Model.find(query, fields, options, callback) Model.find({ 'some.value': 5 }, function (err, docs) { // docs is an array }); Model.findOne Model.findOne({ age: 5}, function (err, doc){ // doc is a Document }); Model.findById Model.findById(obj._id, fu

PHP数据库操作&分页类

MySQL数据库操作类: 1 <?php 2 class mysql { 3 private $db_host; //数据库主机 4 private $db_user; //数据库用户名 5 private $db_pwd; //数据库用户名密码 6 private $db_database; //数据库名 7 private $conn; //数据库连接标识; 8 private $result; //执行query命令的结果资源标识 9 private $sql; //sql执行语句 10

那些年我们学Flask-SQLAlchemy,实现数据库操作,分页等功能

那些年我们学Flask-SQLAlchemy 实现数据库操作,分页等功能  Flask-SQLAlchemy库让flask更方便的使用SQLALchemy,是一个强大的关系形数据库框架,既可以使用orm方式操作数据库,也可以使用原始的SQL命令. Flask-Migrate 是一个数据迁移框架,需要通过Flask-script库来操作. 一.配置Flask-SQLAlchemy 程序使用的数据库地址需要配置在SQLALCHEMY_DATABASE_URI中,SQLALchemy支持多种数据库,配

java操作数据库:分页查询

直接上.... 还是用之前的goods表,增加了一些数据 1.实体类Goods // 封装数据 public class Goods { private int gid; private String gname; private String gprice; private String gdate; public int getGid() { return gid; } public void setGid(int gid) { this.gid = gid; } public String

[js高手之路]Node.js+jade+mongoose实战todolist(分页,ajax编辑,删除)

该系列文章索引: [js高手之路]node js系列课程-创建简易web服务器与文件读写 [js高手之路]node js系列课程-图解express+supervisor+ejs用法 [js高手之路]Node.js实现简易的爬虫-抓取博客所有文章列表信息 [js高手之路]Node.js模板引擎教程-jade速学与实战1-基本用法 [js高手之路]Node.js模板引擎教程-jade速学与实战2-流程控制,转义与非转义 [js高手之路]Node.js模板引擎教程-jade速学与实战3-mixin

数据库——基础(数据库操作,表格操作)——增加高级查询

笔记 LAMP:Linx(操作系统) A(阿帕奇)——网页的应用程序 M(Mysql):体积小,应用简单 P(PHP) 第一步:搭建网页环境——A\M\P WAMP:用WAMP搭建环境 DW:更好的显示 数据库的基本操作: 数据库——表结构——字段(列) 每一行数据成为一条数据(记录) 特点:关系型数据库,有严格的规范 1.必须有主键:能够唯一标识一条数据的字段 2 T-SQL:通用的数据库操作语句 自增长列code(主键列) ;连接键表 最后一个字段不加 ,#注释 创建表:create tab

SQLiteDatabase数据库操作详解

今天花了点时间总结了一下数据的相关知识android中系统自带的数据库SQLiteDatabase数据库,这种数据库操作起来比ormLite数据库(第三方的)麻烦点,但是我对这种数据库操作比较熟悉所以我就采用了这种数据库,如有错误欢迎大家批评指正,谢谢 1.SQLiteDatabase SQLiteDatabase本身是一个数据库的操作类,但是如果想进行数据库的操作,还需要android.database.sqlite.SQLiteOpenHelper类的帮助,在执行SQL语句时execSQL(

phpcms v9 数据库操作函数

表明默认当前load_model('xxxx')模块所在表名xxxx 若要指定表名  则:操作在mysql.class.php中$this->db->select(...) 1.查询  $this->select($where = '', $data = '*', $limit = '', $order = '', $group = '', $key='')   返回结果集数组         条件 ,字段(id,name,email....),范围   排序方式,分组方式,按建名排序