【发布时间】:2016-05-25 08:17:02
【问题描述】:
我有一个关于哪个号码呼叫哪个号码和呼叫详细信息(持续时间和时间等)的 csv
我想将所有数字都称为数组中的特定数字。 该数组应该是一个文档数组,因此在每个文档中我也可以拥有所有调用详细信息。 所以最后我需要带有“调用者”号码和“被调用”数组的文档(该数组如上定义)。
为此,我想出了一个减少地图的解决方案。(非常基本和直观)。 但我的问题是我只需要“呼叫者”号码呼叫的不同号码。
我当前的 mapreduce 脚本会重复拨打的号码。 我怎么能在减少阶段只考虑唯一的数字? 我的代码如下所示:(我在 mongo shell 中输入)
db.contacts.mapReduce(
function(){
numbers = [];
value={phone:this.<<called_number>>};
numbers.push(value);
emit(this.<<caller_number>>,{called:numbers});
},
function(key,values) {
result={called:[]};
values.forEach(function (v) {
var i,j;
for(i=0;i<v.called.length;i++) {
var flag=0;
for(j=0;j<result.called.length;j++) {
if(v.called[i].phone==result.called[j].phone){
flag=1;
}
}
if(flag==0) {
result.called.push(v.called[i])
}
}
});
return result;
},
{"query": {},"out":"new_collection"}
)
我了解 map 和 reduce 函数是 java 脚本函数。 所以即使是 javascript 编码人员也可以在这里帮助我(创建 reduce 函数)。
【问题讨论】:
-
试试 mongobooster.com,一个 MongoDB GUI。您至少应该在编辑器中格式化您的代码。太难读了。
-
现在怎么样?请帮帮我
-
你想做什么?获取同一来电者的所有被叫号码?
-
我想要'a'来电号码的所有被叫号码
标签: javascript mongodb mapreduce bigdata