我正在使用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