使用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);
});
成天都在实现这种烂玩意,啥时候自己也搞一套牛逼的。