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);
});



成天都在实现这样的烂玩意,啥时候自己也搞一套牛逼的。








本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5173107.html,如需转载请自行联系原作者
相关文章
|
存储 NoSQL Redis
【Redis】利用Redis List实现数据库分页快速查询
【Redis】利用Redis List实现数据库分页快速查询
731 0
|
存储 缓存 NoSQL
利用Redis List实现数据库分页快速查询的有效方法
利用Redis List实现数据库分页快速查询的有效方法
|
存储 关系型数据库 MySQL
mysql数据库查询时用到的分页方法有哪些
【8月更文挑战第16天】在MySQL中,实现分页的主要方法包括:1)使用`LIMIT`子句,简单直接但随页数增加性能下降;2)通过子查询优化`LIMIT`分页,提高大页码时的查询效率;3)利用存储过程封装分页逻辑,便于复用但需额外维护;4)借助MySQL变量实现,可能提供更好的性能但实现较复杂。这些方法各有优缺点,可根据实际需求选择适用方案。
1002 2
|
8月前
|
Oracle 关系型数据库 Java
|
SQL JavaScript 前端开发
vue中使用分页组件、将从数据库中查询出来的数据分页展示(前后端分离SpringBoot+Vue)
这篇文章详细介绍了如何在Vue.js中使用分页组件展示从数据库查询出来的数据,包括前端Vue页面的表格和分页组件代码,以及后端SpringBoot的控制层和SQL查询语句。
vue中使用分页组件、将从数据库中查询出来的数据分页展示(前后端分离SpringBoot+Vue)
|
Java
jpa实现增删改查,分页,自定义查询,jpql查询
jpa实现增删改查,分页,自定义查询,jpql查询
200 0
|
关系型数据库 MySQL 数据库
MybatisPlus添加数据数据库没有数据,数据消失,使用Navicate看不到数据,Navicate中Mysql的数据与idea的数据不一定同步,Navicate与idea的数据库同步,其实有分页
MybatisPlus添加数据数据库没有数据,数据消失,使用Navicate看不到数据,Navicate中Mysql的数据与idea的数据不一定同步,Navicate与idea的数据库同步,其实有分页
|
存储 NoSQL Java
【Redis】利用 Redis List 实现 Java 数据库分页快速查询
在大型应用中,数据库分页查询是日常开发中不可避免的需求之一。随着数据量的不断增加,传统的数据库分页方式可能会变得效率较低。为了解决这一问题,本文将介绍如何使用 Redis List 数据结构,结合 Java 编程语言,实现高效的数据库分页查询。
451 9
|
SQL Oracle 关系型数据库
常用数据库的分页语句(mySQL、oracle、PostgreSQL、SQL Server)
常用数据库的分页语句(mySQL、oracle、PostgreSQL、SQL Server)
|
SQL 关系型数据库 MySQL
排序与分页——“MySQL数据库”
排序与分页——“MySQL数据库”

热门文章

最新文章