我是mongo的新手,我已经看到了它的强大功能,我需要做一个map-reduce或聚合,它给出了像这样的文档中值的平均值,最大值和最小值:
{
_id: MongoId(""),
var: [integer with the variable id],
tim: timestamp in unix format,
val: [value can be int, float or string]
}
当用户选择具有字符串作为值的var时,我将使用错误显示处理字符串,但对于其他两个我需要每10个左右的文档获得平均值,最大值和最小值必须像:
{
var: [varid],
avg: [average every 10],
tim: [average tim],
max: [max val in the 10 documents taken for this aggregation],
min: [min val in the 10...]
}
数据示例:
{
"_id" : ObjectId("52cb898fds4bd6c24ae06a9e"),
"timestamp" : ISODate("2012-11-02T01:23:34.010Z")
"value" : 20
},
{
"_id" : ObjectId("52cb898bed4bd6c24ae34h56"),
"timestamp" : ISODate("2012-11-02T01:23:44.010Z")
"value" : 18
},
{
"_id" : ObjectId("52cb898bed4bd6c24ae06a9e"),
"timestamp" : ISODate("2012-11-02T01:23:54.010Z")
"value" : 25
}
...
当前3个文件的结果:
{
"timestamp" : ISODate("2012-11-02T01:23:44.010Z")
"avr" : 21,
"min" : 18,
"max" : 25
}
有没有办法做这样的事情,还是应该继续使用程序来计算这个而不是试图让mongo去做呢?我想这样做是因为每个var每天都有10K文件,获得10天的平均值需要100K文件,然后计算平均值,所有这些都需要一点点ram,我是使用php并且它抱怨它...(memory_limit必须低于512MB所以......我别无选择,只能减少以某种方式传输的数据......)
任何帮助都将受到赞赏,并且将选择符合我需求的最佳答案。