如何在mongoose中扩展查询对象

我试图添加一个链式方法到名为“分页”的查询对象。 如果我把它添加到query.js我可以使用它没有任何问题。 但是,修改其中一个核心文件并不是一个好主意。

我使用这个代码,我发现有一些修改,并希望它是查询原型的一部分,但我没有任何成功,使其工作Query.js。

我怎样才能做到这一点? 有没有关于如何通过模块扩展这些核心文件的文档? 我还没有find任何适合我的东西。

mongoose.Query.prototype.paginate = function(page, limit, cb) { var model, query, skipFrom; if (page == null) { page = 1; } if (limit == null) { limit = 10; } query = this; model = this.model; skipFrom = (page * limit) - limit; query = query.skip(skipFrom).limit(limit); if (cb) { return query.run(function(err, docs) { if (err) { return cb(err, null, null); } else { return model.count(query._conditions, function(err, total) { return cb(null, total, docs); }); } }); } else { throw new Error("pagination needs a callback as the third argument."); } }; 

事实certificate,这比我预期的要容易得多。 这是我做的,它的工作:

创build一个paginate.js文件:

 mongoose = require('mongoose'); mongoose.Query.prototype.paginate = function(aPageStart, aLimit, aCallback) { var model, query; if (aLimit == null) { aLimit = 10; } query = this; model = this.model; query = query.skip(aPageStart).limit(aLimit); if (aCallback) { return query.run(function(aError, aDocs) { if (aError) { return aCallback(aError, null, null); } else { return model.count(query._conditions, function(aError, aTotal) { return aCallback(null, aTotal, aDocs); }); } }); } else { throw new Error("pagination needs a callback as the third argument."); } }; 

只要需要它(在我的模型在这种情况下)。

那么你可以把这个方法称为链的最后一个。

干杯,

马科斯。

也许你可以使用这个模块或看看他们是如何实现它: mongoose分页

另一个解决scheme是像这样为你的模式创build一个方法:

 Schema.statics.paginate = (page, limit, cb) -> ... return query; // or Schema.statics.paginate = (query, page, limit, cb) -> ... return query.exec();