JavaScript方法链接,从数组中添加方法

嗨,我想知道你是否可以帮助我dynamicbuild立一个方法链,我怀疑这很容易做到,如果你知道如何…

使用mongoose和node.js我正在查询一个mongo数据库。 我使用一个函数来传递一个对象,如下所示:

transaction = { model: a mongoose model req: Express.js request object res: Express.js response object query: a mongo db query eg, {_id:xxxxx} populate: [ { field: 'name_of_doc_field' select: 'field1,field2' } ] } 

我dynamic构build查询,并且在函数中,我不知道需要填充多less个字段,或者是否需要偏移量或限制。

我想链接我的发现:

 transaction.model.find(transaction.query).skip(offset).limit(limit).exec(function(err, collection_obj){...}) 

我如何dynamic构build这个链,我需要testing一个偏移量是否在testing对象中提供,如果是将.skip方法添加到链中等等,并且使用填充方法,将会有一个项目数组,该数组中的每个项目都需要添加到链中的新的填充方法。

最后,我需要一个exec方法到链的末尾。

感谢您的帮助提前

 // Generated by CoffeeScript 1.4.0 module.exports = { findMany: function(transaction) { var collection_obj, limit, offset; offset = parseInt(transaction.req.query.offset) || 0; limit = parseInt(transaction.req.query.limit) || 100; collection_obj = null; return transaction.model.find(transaction.query).skip(offset).limit(limit).exec(function(err, collection_obj) { return found(err, collection_obj, transaction.req, transaction.res); }); }, } 

您可以根据transaction内容将链条分解成可以有条件执行的步骤:

 var q = transaction.model.find(transaction.query); if (offset) { q = q.skip(offset); } if (limit) { q = q.limit(limit); } if (transaction.populate) { transaction.populate.forEach(function(pop) { q = q.populate(pop.field, pop.select); }); } q.exec(function(err, collection_obj){...});