相关疑难解决方法(0)

快速查找mongodb中索引列的重复项

我在mongodb中有一个md5的集合.我想找到所有重复的内容.md5列已编制索引.你知道使用map reduce做任何快速的方法吗?或者我应该迭代所有记录并手动检查重复项?

我目前使用map reduce的方法几乎两次迭代集合(假设重复数量非常少):

res = db.files.mapReduce(
    function () {
        emit(this.md5, 1);
    }, 
    function (key, vals) {
        return Array.sum(vals);
    }
)

db[res.result].find({value: {$gte:1}}).forEach(
function (obj) {
    out.duplicates.insert(obj)
});
Run Code Online (Sandbox Code Playgroud)

mapreduce mongodb

19
推荐指数
3
解决办法
3万
查看次数

使用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万
查看次数

在MongoDB数组中查找重复值

我有一个包含以下格式的条目的集合:

{ 
    "_id" : ObjectId("5538e75c3cea103b25ff94a3"), 
    "userID" : "USER001", 
    "userName" : "manish", 
    "collegeIDs" : [
        "COL_HARY",
        "COL_MARY",
        "COL_JOHNS",
        "COL_CAS",
        "COL_JAMES",
        "COL_MARY",
        "COL_MARY",
        "COL_JOHNS"
    ]
}
Run Code Online (Sandbox Code Playgroud)

我需要找出那些重复的大学ID.所以结果应该给出"COL_MARY","COL_JOHNS",如果可能的话,给出重复计数.请给mongo查询找到它.

mongodb

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

如何通过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
查看次数

如何从MongoDB数组中删除重复的对象?

我的数据如下:

{

    "foo_list": [
      {
        "id": "98aa4987-d812-4aba-ac20-92d1079f87b2",
        "name": "Foo 1",
        "slug": "foo-1"
      },
      {
        "id": "98aa4987-d812-4aba-ac20-92d1079f87b2",
        "name": "Foo 1",
        "slug": "foo-1"
      },
      {
        "id": "157569ec-abab-4bfb-b732-55e9c8f4a57d",
        "name": "Foo 3",
        "slug": "foo-3"
      }
    ]
}
Run Code Online (Sandbox Code Playgroud)

foo_list模型中的字段在哪里被称为Bar.请注意,数组中的第一个和第二个对象是完全重复的.

除了切换到PostgresSQL的明显解决方案之外,我可以运行哪些MongoDB查询来删除重复的条目foo_list

类似的答案并没有完全削减它:

如果数组中有明显的字符串,这些问题就会回答这个问题.但是在我的情况下,数组中充满了对象.

我希望很明显我对查询数据库不感兴趣; 我希望重复项永远不会从数据库中消失.

javascript mongodb mongodb-query aggregation-framework

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

MongoDB在聚合管道中使用$ addToSet避免重复

有聚合管道:

db.getCollection('yourCollection').aggregate(
    {
        $unwind: {
            path: "$dates",
            includeArrayIndex: "idx"
        }
    },
    {
        $project: {
            _id: 0,
            dates: 1,
            numbers: { $arrayElemAt: ["$numbers", "$idx"] },
            goals: { $arrayElemAt: ["$goals", "$idx"] },
            durations: { $arrayElemAt: ["$durations", "$idx"] }
        }
    }
)
Run Code Online (Sandbox Code Playgroud)

执行以下数据(示例文档):

{
    "_id" : ObjectId("52d017d4b60fb046cdaf4851"),
    "dates" : [
        1399518702000,
        1399126333000,
        1399209192000,
        1399027545000
    ],
    "dress_number" : "4",
    "name" : "J. Evans",
    "numbers" : [
        "5982",
        "5983",
        "5984",
        "5985"
    ],
    "goals": [
        "1",
        "0",
        "4",
        "2"
    ],
   "durations": [
       "78",
       "45",
       "90",
       "90" …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework mongodb-aggregation

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