2011-08-21 29 views
1

我需要在mongo数据库中找到具有大约20000个文档的集合中的重复项。结果应该给我关键(我正在分组)以及只有当计数大于1时才重复的次数。下面是不完整的,但是当我在mongo中运行时它也给出错误。 EXE壳:从mongodb使用map reduce寻找重复记录

db.runCommand({ mapreduce: users, 
map : function Map() { 
       emit(this.emailId, 1); 
} 
reduce : function Reduce(key, vals) { 
       return Array.sum(vals); 

} 
finalize : function Finalize(key, reduced) { 
       return reduced 
} 
out : { inline : 1 } 
}); 

语法错误:属性列表后缺少}(壳):5

为什么上面的错误来了吗? 如何才能得到计数大于1的那些?

+0

这可能有所帮助:http://stackoverflow.com/questions/7102918/in-mongodb-how -DO-I-检查-IF-所有的的文档,是唯一换值/ 7103581#7103581 –

回答

1

我不确定这是否是您输入的代码的确切副本,但看起来您在传递到runCommand的对象中的字段之间缺少逗号。尝试:

db.runCommand({ mapreduce: users, 
    map : function Map() { 
     emit(this.emailId, 1); 
    }, 
    reduce : function Reduce(key, vals) { 
     return Array.sum(vals); 
    }, 
    finalize : function Finalize(key, reduced) { 
     return reduced 
    }, 
    out : { inline : 1 } 
}); 

还要注意的是使用finalize即使,你不能真正在单传配合的map-reduce删除输出的文档(或集合)的条目。但是,无论您使用的是out: {inline: 1}还是out: "some_collection",筛选出计数为1的结果都非常简单。