使用mongodb中的map reduce查找重复项

时间:2011-08-21 12:08:49

标签: mongodb

我需要在拥有大约20000个文档的mongo db中的集合中找到重复项。结果应该给我一个键(我在其上分组)以及它们重复的次数,只有当计数大于1.以下是不完整的,但是当我在mongo中运行时也会给出错误。 exe shell:

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 }
});
在属性列表(shell)之后

SyntaxError:missing}:5

为什么会出现上述错误? 怎么才能得到数大于1的那些?

1 个答案:

答案 0 :(得分: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的结果都非常简单。