【问题标题】:deleting duplicate records from mongo db collection从 mongo db 集合中删除重复记录
【发布时间】:2020-07-06 11:15:04
【问题描述】:

下面是我的收藏,你能告诉我如何编写代码从下面的收藏中删除重复记录,收藏中有重复记录,请解释我如何从收藏中删除重复记录。

   /* 1 */
{
    "_id" : ObjectId("5e84200bdf949c00404ed5ff"),
    "area" : "573",
    "bc" : "GER",
    "bd" : "52001450",
    "bg" : "52001450",
    "borg" : "cde5642",
    "bsg" : "51585929",
    "bsgname" : "INFO TECHNOLOGY",
    "consulting" : null,
    "mobilePhoneNumber" : null,
    "cfax" : null,
    "l" : "BERL",
    "cpgr" : null,
    "o" : "S",
    "friendlyCountryName" : "Germ",
    "ctel" : "+49",
    "mail" : "tl2625@ge.at.com",
    "exch" : "204",
    "ext" : "5408",
    "facsimileTelephoneNumber" : null,
    "givenName" : "POMAS",
    "employeeNumber" : "0249527",
    "jt" : "MC",
    "jtname" : "FLEX FORCE ENGINEER IV",
    "sn" : "LEMP",
  
}

/* 2*/

{
    "_id" : ObjectId("5e84200bdf949c00404ed601"),
    "area" : "573",
    "bc" : "GER",
    "bd" : "52001450",
    "bg" : "52001450",
    "borg" : "cde5642",
    "bsg" : "51585929",
    "bsgname" : "INFO TECHNOLOGY",
    "consulting" : null,
    "mobilePhoneNumber" : null,
    "cfax" : null,
    "l" : "BERL",
    "cpgr" : null,
    "o" : "S",
    "friendlyCountryName" : "Germ",
    "ctel" : "+49",
    "mail" : "tl2625@ge.at.com",
    "exch" : "204",
    "ext" : "5408",
    "facsimileTelephoneNumber" : null,
    "givenName" : "POMAS",
    "employeeNumber" : "0249527",
    "jt" : "MC",
    "jtname" : "FLEX FORCE ENGINEER IV",
    "sn" : "LEMP",

【问题讨论】:

  • 你怎么能有2个具有相同objectId的文档?
  • 是更新专家,谢谢。
  • 如果文档重复,您决定哪些键?
  • 你可以使用这个答案stackoverflow.com/a/33364353/8307456
  • 关于“employeeNumber”:“0249527”,我该如何写删除重复的员工

标签: mongodb mongodb-query


【解决方案1】:

通过下一段代码,您可以找到重复的记录。 (提示:将 ..., 更改为其他字段。)

var cursor = db.collection.aggregate(
[
        {
            "$group": {
                '_id': {
                    "area":"$area",
                    ..., # fill here by other fields
                    "sn": "$sn"
            },
            "count": {
                    "$sum": 1
                }
            },
            "assets":{
                  "$push": {"assets_id":"$_id"}
        },
        {
            "$match": {
                "count": {
                    "$gt": 1
                }
            }

        }, 
    {
            "$project": {
                "assets": "assets"
            }

        }
    }

]
)

然后通过过滤_id删除结果:

cursor.forEach(function (doc){
...     db.collection.remove({"_id": doc.assets[0].assets_id});
... });

现在你只需要用其他字段填写...,例如我填写的areasn

【讨论】:

  • 感谢专家,能否请您更新我的查询需要如何更改。
  • 如果您再次对... 评论有疑问,我会编辑答案。
  • 感谢专家,如果我的收藏是这样的: db.getCollection('employeerecords').find({}) 我如何输入以上查询...我也不想创建新收藏,添加重复记录,然后需要删除以进行测试。
  • aggregate 方法比find, find 只是根据一些过滤器查找记录更复杂,但是聚合在每一步都有多个阶段(find 有一个步骤)你创建半带有新字段的表,最后,您可以通过project 来属性字段!所以我建议您通过替换集合名称来运行上述命令,然后删除结果 ID。对于创建db.getCollection('employeerecords').insert({....}) 用任意字段填充... 并重复它,然后它会插入多次。
  • 但是我们可以将重复记录输入到集合中,我的意思是列和值,但是对象 ID 将是唯一的仪式。
猜你喜欢
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 2018-08-08
  • 2020-08-27
  • 2016-01-07
  • 1970-01-01
相关资源
最近更新 更多