相关疑难解决方法(0)

在mongodb中删除重复文档的最快方法

我在mongodb中有大约170万份文件(将来10m +).其中一些代表我不想要的重复条目.文档的结构是这样的:

{
    _id: 14124412,
    nodes: [
        12345,
        54321
        ],
    name: "Some beauty"
}
Run Code Online (Sandbox Code Playgroud)

如果文档至少有一个节点与具有相同名称的另一个文档相同,则文档是重复的.删除重复项的最快方法是什么?

optimization performance duplicates mongodb

34
推荐指数
5
解决办法
5万
查看次数

即使添加了唯一键,MongoDB也会复制文档

我创建了一个集合并添加了一个这样的唯一键

db.user_services.createIndex({"uid":1 , "sid": 1},{unique:true,dropDups: true})
Run Code Online (Sandbox Code Playgroud)

该集合看起来像这样的"user_services"

{
 "_id" : ObjectId("55068b35f791c7f81000002d"),
 "uid" : 15,
 "sid" : 1,
 "rate" : 5
},
{

 "_id" : ObjectId("55068b35f791c7f81000002f"),
 "uid" : 15,
 "sid" : 1,
 "rate" : 4
}
Run Code Online (Sandbox Code Playgroud)

问题:

我使用php驱动程序插入具有相同的uid和sid的文档,它正在插入.

我想要的是

  1. 在Mongo Shell上:在uid和sid上添加唯一键,没有具有相同uid和sid的重复文档.
  2. 在PHP方面:有一些像mysql "插入(值)重复密钥更新率=率+ 1".这就是每当我尝试插入文档时,如果不存在,则应该插入文档,它应该更新文档的速率字段

php mongodb mongodb-query aggregation-framework

16
推荐指数
2
解决办法
1万
查看次数

使用MapReduce删除重复记录

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

[
  { "MlsId": "12345"" },
  { "MlsId": "12345" },
  { "MlsId": "23456" },
  { "MlsId": "23456" },
  { "MlsId": "0" },
  { "MlsId": "0" },
  { "MlsId": "" },
  { "MlsId": "" }
]
Run Code Online (Sandbox Code Playgroud)

如果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();
Run Code Online (Sandbox Code Playgroud)

mapreduce mongodb

7
推荐指数
1
解决办法
2万
查看次数

根据字段删除重复的文档

我已经看到了很多解决方案,但它们都适用于Mongo v2并且不适合V3.

我的文档看起来像这样:

    { 
    "_id" : ObjectId("582c98667d81e1d0270cb3e9"), 
    "asin" : "B01MTKPJT1", 
    "url" : "https://www.amazon.com/Trump-President-Presidential-Victory-T-Shirt/dp/B01MTKPJT1%3FSubscriptionId%3DAKIAIVCW62S7NTZ2U2AQ%26tag%3Dselfbalancingscooters-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB01MTKPJT1", 
    "image" : "http://ecx.images-amazon.com/images/I/41RvN8ud6UL.jpg", 
    "salesRank" : NumberInt(442137), 
    "title" : "Trump Wins 45th President Presidential Victory T-Shirt", 
    "brand" : "\"Getting Political On Me\"", 
    "favourite" : false, 
    "createdAt" : ISODate("2016-11-16T17:33:26.763+0000"), 
    "updatedAt" : ISODate("2016-11-16T17:33:26.763+0000")
}
Run Code Online (Sandbox Code Playgroud)

我的收藏包含大约500k文件.我想删除ASIN相同的所有重复文档(1除外)

我怎样才能做到这一点?

mongodb mongodb-query aggregation-framework

6
推荐指数
1
解决办法
4681
查看次数

如何通过MapReduce删除MongoDB中的重复记录?

我在MongoDB上有一个非常大的集合,我想从该集合中删除重复的记录.我想到的第一个想法是删除索引并使用dropDups重建索引.但是,重复的数据太多,MongoDB无法处理.

所以我转向MapReduce寻求帮助.这是我目前的进展.

m = function () { 
    emit(this.myid, 1); 
}

r = function (k, vals) { 
    return Array.sum(vals); 
} 

res = db.userList.mapReduce(m,r, { out : "myoutput" });
Run Code Online (Sandbox Code Playgroud)

并且所有重复记录的"myid"都存储在"myoutput"集合中.但是,我不知道如何通过引用myoutput.myid从userList中删除记录.它假设是这样的:

db.myoutput.find({value: {$gt: 1}}).forEach(
    function(obj) {
        db.userList.remove(xxxxxxxxx) // I don't know how to do so
})
Run Code Online (Sandbox Code Playgroud)

顺便说一句,使用foreach似乎会用理智的myid擦除所有记录.但我只是想删除重复的记录.例如:

{ "_id" : ObjectId("4edc6773e206a55d1c0000d8"), "myid" : 0 }
{ "_id" : ObjectId("4edc6780e206a55e6100011a"), "myid" : 0 }

{ "_id" : ObjectId("4edc6784e206a55ed30000c1"), "myid" : 0 }
Run Code Online (Sandbox Code Playgroud)

最终结果应该只保留一条记录.有人可以给我一些帮助吗?

谢谢.:)

mapreduce mongodb

5
推荐指数
1
解决办法
8988
查看次数