我正在使用MongoDB并需要删除重复的记录。我有一个上市的收集,看起来像这样:(简体)使用MapReduce删除重复的记录
[
{ "MlsId": "12345"" },
{ "MlsId": "12345" },
{ "MlsId": "23456" },
{ "MlsId": "23456" },
{ "MlsId": "0" },
{ "MlsId": "0" },
{ "MlsId": "" },
{ "MlsId": "" }
]
的列表为重复,如果MlsId不是“”或“0”,另一个上市具有相同的MlsId。所以在上面的例子中,第二个和第四个记录需要被删除。
如何查找所有重复列表并将其删除?我开始研究MapReduce,但找不到适合我的案例。
这里是我到目前为止,但它不检查MlsId为“0”或“”:
m = function() {
emit(this.MlsId, 1);
}
r = function (k, vals) {
return Array.sum(vals);
}
res = db.Listing.mapReduce(m,r);
db[res.result].find({value: {$gt: 1}});
db[res.result].drop();
你可能不能够回答这个问题,但如果我宣布M和R的功能,然后执行mapReduce函数,然后运行db [res.result] .drop();命令,它会删除所有列表还是只删除重复的列表?我不明白mapReduce并发出所以不知道这是如何工作的... – Justin 2011-04-03 16:18:56
我已经做了reduce()的小修改。我不知道锄头db.drop()的作品,但是,是的,我想它会删除所有针对该特定Id的委托。但我希望你对map-reduce部分的理解是清楚的。我不确定mongodb的语法,但..会看到我是否可以找出一些东西.. – 2011-04-03 16:51:51
你可以尝试添加一个索引与删除重复选项,这里提到:http://www.mongodb.org/display/DOCS/索引它会自动删除重复值。另一种方法是首先删除()所有值,然后添加一个值。 – 2011-04-03 17:02:47