【发布时间】:2015-02-06 11:58:36
【问题描述】:
我想要一个 map reduce 函数从满足以下条件的以下输入集合中绘制以下输出。
输入集合:
[{
a:1,
b:'test',
indices:[1,2,4,5]
}, {
a:2,
b:'test',
indices:[2, 3, 5]
}, {
a:2,
b:'test',
indices:[1, 2, 4]
}, {
a:3,
b:'apple',
indices:[1, 2]
}, {
a:4,
b:'apple',
indices:[1, 3, 5]
}, {
a:5,
b:'orange',
indices:[232]
}, {
a:5,
b:'dummy',
indices:[2]
}, {
a:6,
b:'dummy',
indices:[11, 2, 4]
}, {
a:6,
b:'dummy',
indices:[11, 3, 2]
}, {
a:6,
b:'dummy',
indices:[1, 2, 3, 4, 5]
}]
条件是:
- 只选择索引数组有
2。这可以发送为 询问。即查询:{indices:{$in:2}} - 按
b分组 - 如果有重复的
a,那么它应该被认为是1例如:具有a = 2的文档存在两次满足条件索引 有 2 个。 - 我的输入集合总是满足条件 if a
存在于“测试”中,它不会出现在
dummy/apple/etc中。但是一个 可以重复。
这是我尝试过的:
db.x.mapReduce(function(){
emit(this.b, 1);
}, function(key, reducable){
return Array.sum(reducable);
}, {
out: {inline: 1},
query:{
'indices':{$in:2}
}
});
输出: [
{
"_id" : test",
"value" : {
"count" : 3 -> It should be 2
}
},{
"_id" : apple",
"value" : {
"count" : 2
}
},{
"_id" : dummy",
"value" : {
"count" : 4 -> It should be 2
}
}]
预期输出:
[{
"_id" : test",
"value" : {
"count" : 2
}
},{
"_id" : apple",
"value" : {
"count" : 2
}
},{
"_id" : dummy",
"value" : {
"count" : 2
}
}]
【问题讨论】:
标签: mongodb mapreduce mongodb-query aggregation-framework