首页 > 解决方案 > 创建的集合试图删除重复的记录

问题描述

我创建了集合 test_emp

/* 1 */
{
    "_id" : ObjectId("5e84200bdf949c00404ed5ff"),
    "area" : "573",
    "bc" : "NZ",
    "bd" : "52001450",
    "bg" : "52001450",
    "borg" : "f52001450",
    "bsg" : "54878",
    "bsgname" : "INFORMATION TECHNOLOGY",
    "o" : "S",
    "friendlyCountryName" : "NZ",
    "ctel" : "+1",
    "mail" : "tl2625@nz.at.com",
    "exch" : "204",
    "ext" : "5408",
    "facsimileTelephoneNumber" : null,
    "givenName" : "POMAS",
    "employeeNumber" : "45629"
}

/* 2 */
{
    "_id" : ObjectId("5e84200bdf949c00404ed600"),
    "area" : "573",
    "bc" : "NZ",
    "bd" : "52001450",
    "bg" : "52001450",
    "borg" : "f52001450",
    "bsg" : "54878",
    "bsgname" : "INFORMATION TECHNOLOGY",
    "o" : "S",
    "friendlyCountryName" : "NZ",
    "ctel" : "+1",
    "mail" : "tl2625@nz.at.com",
    "exch" : "204",
    "ext" : "5408",
    "facsimileTelephoneNumber" : null,
    "givenName" : "POMAS",
    "employeeNumber" : "45629"
}

我想删除重复的记录,首先检查下面的聚合函数查询:

db.test_emp.aggregate({ $group: { _id: { "employeeNumber": "$employeeNumber", "givenName" : "$givenName" }}})



Error:
TypeError: pipeline[(pipeline.length - 1)] is undefined 
Details:
DB.prototype._runAggregate@src/mongo/shell/db.js:236:1
DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1062:12
DBCollection.prototype.aggregate@:1:355
@(shell):1:1

还尝试使用删除重复命令:

db.test_emp.ensureIndex( { employeeNumber:1 }, { unique:true, dropDups:true } )

errmsg" : "E11000 duplicate key error collection: phone.test_emp index: employeeNumber_1 dup key: { : \"0249527\" }",
    "code" : 11000,

请建议使用 wht 查询从集合中删除这些重复记录。

标签: mongodbmongodb-query

解决方案


你有几个问题。

db.test.aggregate([
  {
    $group: {
      _id: {
        "employeeNumber": "$employeeNumber",
        "givenName": "$givenName"
      }
    }
  }
])
  1. aggregate query应由[]

  2. 您无法在现有集合上创建索引,因为您已经有重复数据。

那么你现在可以做什么:

  1. 创建一个集合
  2. 创建唯一索引 - 您尝试的第二个命令
  3. 从现有集合创建转储mongodump
  4. 加载到新集合中。
  5. 放下你的旧收藏。
  6. 将新集合重命名为旧集合名称

推荐阅读