我试图找出如何打印日志文件的概述。
为此,我想返回一个包含每天peek-entry的列表。
module.exports = {
overview: function(req, res) {
var query = streamlog.find({ groupBy: ['created'], max: ['ogg'] });
query.exec(function (err, matchingRecords) {
res.ok(matchingRecords);
});
},
};
这只解决了问题的一部分,因为在使用上述groupBy时,只有几秒/分钟/小时不同的项目被认为是相同的。
我使用mongo,如果这可能有帮助
答案 0 :(得分:1)
由于您需要的是mongo将返回的值的本地转换,因此没有明确的方法来执行您希望它执行的操作。
您可以使用query.native()
,但这不允许您使用水线组。
您还可以在集合中创建另一个名为createdDate
的列,此列将使用较短的日期格式进行更新,以便您可以执行聚合函数。
对于这种混淆感到抱歉,但简而言之,您无法对需要转换的值进行分组。你必须在之前/之后预先形成一些东西才能达到你想要的效果。
答案 1 :(得分:1)
通过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);
});
}
);
});
},
由于这仍然是一种解决方法,我不会勾选我的答案,并且对于任何具有更好性能的答案感到高兴,然后:/