组水线 – 白天的结果

我想弄清楚如何打印日志文件的概述。

为此,我希望每天都要返回一个列表。

module.exports = { overview: function(req, res) { var query = streamlog.find({ groupBy: ['created'], max: ['ogg'] }); query.exec(function (err, matchingRecords) { res.ok(matchingRecords); }); }, }; 

这只能解决部分问题,因为使用上面的groupBy时,仅以秒/分钟/小时为单位的项目不相同。

我正在使用mongo,如果这可能有帮助

因为你需要的是mongo将要返回的值的本地转换,所以没有明确的方法去做你想做的事情。

你可以使用query.native()但不允许你使用水线组。

你也可以在你的集合中创build另一个名为createdDate列,这个列会用更短的date格式进行更新,这样你就可以执行你的聚合函数。

对不起,我感到困惑,但总之你不能对需要转换的值进行分组。 为了达到这个效果,你必须在之前/之后进行一些预处理。

通过mapReduce部分解决问题的一种方法

  overview: function(req, res) { streamlog.native(function(err, collection) { if (err) return res.serverError(err); collection.mapReduce( function() { // Indonesian dates are formatted as 16/03/1990 var key = this.created.toLocaleDateString('id'); emit(key, this); }, function(k, v) { var biggest = { t: 0, v: {} }; v.forEach(function(candidate) { if (candidate.ogg + candidate.mp3 > biggest.t) { biggest.t = candidate.ogg + candidate.mp3; biggest.v = candidate; } }); return biggest.v; }, { out: "log_overview" }, function(error, reduceCollection) { reduceCollection.find().toArray(function(a, b) { res.ok(b); }); } ); }); }, 

由于这仍然是一个解决办法,我不会打勾我的答案,并很高兴有更好的performance,然后这个答案:/