根据req参数dynamic添加字段到mongoose聚合

我正在build立一个API,其中可以指定3个input参数,例如: /trips/:id/:from/:to 。 我特别感兴趣的参数是fromto 。 在我的mongoDB集合中,我有如下的结构:

 id 2014_08 2014_09 ... 1 [...] [...] 2 [...] [...] 

现在我想在下面的聚合中实现,就是根据从中调用的内容和to ,它应该返回相应的字段。

例如: GET /trips/1/2014_08/2014_09应返回:

 id: 1, 2014_08: { ... }, 2014_09: { ... } 

我的路线如下所示:

 app.get('/trips/:id/:from/:to', function(req,res) { var aggr = Trip.aggregate([ { "$match": { "_id": Number(req.params.id) } },{ "$project": { "_id" : 1, "trips_201408": "$2014_08", //How to append more to this, according to from/to? } } ]) aggr.options = { allowDiskUse: true }; aggr.exec(function(err, trips){ if(err) res.send(err); res.json(trips); }); }); 

所以我的问题是,创build项目阶段的dynamic对应于from和input的input是一个好的做法吗?

一切都只是一个普通的JavaScript对象

 var project = { }; project['trips_' + req.params.from] = 1; project['trips_' + req.params.to] = 1; var aggr = Trip.aggregate([ { "$match": { "_id": Number(req.params.id) } }, { "$project": project } ]) 

也总是暗示_id


或者循环一个范围:

 var from = new Date(req.params.from.split('_').join('-')+'-01'); var to = new Date(req.params.to.split('_').join('-')+'-01'); var project = { }; for ( var d = from; d <= to; d.setMonth(d.getMonth() + 1) ) { project['trips_' + d.getUTCFullYear() + '_' + ( (d.getUTCMonth() + 1 < 10) ? '0' + (d.getUTCMonth() + 1) : (d.getUTCMonth() + 1) )] = 1; }