组水线 – 白天的结果
我想弄清楚如何打印日志文件的概述。
为此,我希望每天都要返回一个列表。
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,然后这个答案:/