gpt4 book ai didi

mongodb - 使用 MapReduce 删除重复记录

转载 作者:IT老高 更新时间:2023-10-28 13:23:17 26 4
gpt4 key购买 nike

我正在使用 MongoDB,需要删除重复记录。我有一个看起来像这样的列表集合:(简化)

[
{ "MlsId": "12345"" },
{ "MlsId": "12345" },
{ "MlsId": "23456" },
{ "MlsId": "23456" },
{ "MlsId": "0" },
{ "MlsId": "0" },
{ "MlsId": "" },
{ "MlsId": "" }
]

如果 MlsId 不是“”或“0”并且另一个列表具有相同的 MlsId,则该列表是重复的。因此,在上面的示例中,需要删除第 2 条和第 4 条记录。

如何找到所有重复的列表并将其删除?我开始查看 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();

最佳答案

我没有用过 mongoDB,但我用过 mapreduce。我认为您在 mapreduce 功能方面走在正确的轨道上。要排除 he 0 和空字符串,您可以在 map 函数本身中添加一个检查.. 类似于

m = function () { 
if(this.MlsId!=0 && this.MlsId!="") {
emit(this.MlsId, 1);
}
}

reduce 应该返回键值对。所以应该是:

r = function(k, vals) {
emit(k,Arrays.sum(vals);
}

在此之后,您应该在输出中有一组键值对,其中键是 MlsId,值是此特定 ID 出现的次数。我不确定 db.drop() 部分。正如您所指出的,它很可能会删除所有 MlsId,而不是仅删除重复的 MlsId。为了解决这个问题,也许你可以先调用 drop() 然后重新创建 MlsId 一次。这对你有用吗?

关于mongodb - 使用 MapReduce 删除重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5530580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com