【发布时间】:2014-04-09 10:16:25
【问题描述】:
我有一个庞大的数据集(以百万计),格式如下:
{
"userid" : "codejammer",
"data" : [
{"type" : "number", "value" : "23748"},
{"type" : "message","value" : "one"}
]
}
我想得到 message 的计数值 one 为 userid - codejammer
以下是我正在使用的 mapreduce 函数: 地图:
var map = function(){
emit(this.data[0].value,1);
}
减少
var reduce = function(key,values){
return Array.sum(values);
}
选项
var options = {
"query":{"userid" : "codejammer",
"data.type" : "message"},
"out" : "aggregrated"
}
mapreduce 函数成功执行,输出如下:
{
"_id" : 23748,
"value" : 1
}
但是,我期待以下输出:
{
"_id" : one,
"value" : 1
}
选项中的query 过滤器将整个数组发送到映射函数,即使我特别要求data.type : "message"
有没有办法在query 过滤器中使用projection 运算符来仅获取数组中所需的项目?
非常感谢您的帮助。
【问题讨论】:
标签: javascript node.js mongodb mapreduce aggregation-framework