MongoDB 컬렉션에서 중복 문서 찾기

원문 게재here .

MongoDB 컬렉션에서 중복 문서를 찾고 계십니까? 이 기사는 특정 필드별로 MongoDB 컬렉션에서 중복 레코드를 찾는 데 도움이 될 것입니다.

MongoDB is a JSON based document-oriented database that can handle big size of data without compromising the performance.



MongoDB 컬렉션에서 중복 문서 찾기
컬렉션에서 모든 중복 문서를 제거하고 싶지만 찾는 방법을 모르는 경우가 있습니다. 여기에서는 MongoDB에서 중복 레코드를 찾는 방법을 살펴보겠습니다. 중복을 찾으면 Mongo 컬렉션에서 쉽게 제거할 수 있습니다.

이 예에서는 Github Public IssuesAPI를 사용하고 있습니다. Github API에서 문제를 가져와 중복을 만들기 위해 동일한 요청을 여러 번 수행하여 데이터베이스에 삽입했습니다.
aggregate$group 파이프라인 연산자와 함께 $match 메서드를 사용하여 중복을 찾습니다. 중복을 가져오는 코드를 단계별로 구현해 보겠습니다.

필드별 MongoDB 그룹 레코드



중복 검색을 구현하기 위한 첫 번째 단계는 레코드 그룹화입니다.

db.issues.aggregate([  
    {$group: {
        _id: {IssueNumber: "$issue_number"}
        }
    }
]);


위의 코드는 issues 필드로 그룹화된 issue_number 컬렉션에 있는 모든 문서를 가져옵니다.

/* 1 */
{
    "_id" : {
        "IssueNumber" : 2778
    }
}

/* 2 */
{
    "_id" : {
        "IssueNumber" : 80
    }
}

/* 3 */
{
    "_id" : {
        "IssueNumber" : 2592
    }
}

/* 4 */
{
    "_id" : {
        "IssueNumber" : 2596
    }
}

/* 5 */
{
    "_id" : {
        "IssueNumber" : 2599
    }
}

/* 6 */
{
    "_id" : {
        "IssueNumber" : 98
    }
}

/* 7 */
{
    "_id" : {
        "IssueNumber" : 2602
    }
}

/* 8 */
{
    "_id" : {
        "IssueNumber" : 99
    }
}

/* 9 */
{
    "_id" : {
        "IssueNumber" : 2607
    }
}

/* 10 */
{
    "_id" : {
        "IssueNumber" : 100
    }
}


MongoDB 중복 문서 가져오기



이제 전체 쿼리를 구현하고 MongoDB 컬렉션에서 개수가 1개 이상인 모든 행을 가져올 때입니다.

db.issues.aggregate([  
    {$group: {
        _id: {IssueNumber: "$issue_number"},
        uniqueIds: {$addToSet: "$_id"},
        count: {$sum: 1}
        }
    },
    {$match: { 
        count: {"$gt": 1}
        }
    }
]);

$addToSet 연산자는 값이 아직 없는 경우 배열에 값을 추가합니다. 값이 이미 있으면 아무 작업도 수행하지 않습니다.
$sum 숫자 값의 합계를 계산하여 반환합니다.
$match 결과 집합에 조건을 적용합니다. $gtcount가 제공된 숫자(즉, 1)보다 큰지 확인합니다.

위의 쿼리는 다음과 같은 출력을 생성합니다.

/* 1 */
{
    "_id" : {
        "IssueNumber" : 34
    },
    "uniqueIds" : [ 
        ObjectId("61b993c2f8fba0f17accd7fc"), 
        ObjectId("61b9937b12b680e75f5a7fac"), 
        ObjectId("61b88043dcb3fc4c9c03ca8e")
    ],
    "count" : 3.0
}

/* 2 */
{
    "_id" : {
        "IssueNumber" : 37
    },
    "uniqueIds" : [ 
        ObjectId("61b993c1f8fba0f17accd7f6"), 
        ObjectId("61b9937b12b680e75f5a7f97"), 
        ObjectId("61b88042dcb3fc4c9c03ca82")
    ],
    "count" : 3.0
}

/* 3 */
{
    "_id" : {
        "IssueNumber" : 677
    },
    "uniqueIds" : [ 
        ObjectId("61b993baf8fba0f17accd6bd"), 
        ObjectId("61b88042dcb3fc4c9c03ca76")
    ],
    "count" : 2.0
}

/* 4 */
{
    "_id" : {
        "IssueNumber" : 695
    },
    "uniqueIds" : [ 
        ObjectId("61b993b9f8fba0f17accd667"), 
        ObjectId("61b88040dcb3fc4c9c03ca4a")
    ],
    "count" : 2.0
}

/* 5 */
{
    "_id" : {
        "IssueNumber" : 700
    },
    "uniqueIds" : [ 
        ObjectId("61b993b8f8fba0f17accd653"), 
        ObjectId("61b88040dcb3fc4c9c03ca42")
    ],
    "count" : 2.0
}

/* 6 */
{
    "_id" : {
        "IssueNumber" : 1871
    },
    "uniqueIds" : [ 
        ObjectId("61b993b8f8fba0f17accd60c"), 
        ObjectId("61b8803fdcb3fc4c9c03ca25")
    ],
    "count" : 2.0
}


이제 MongoDB 컬렉션에 있는 모든 중복 레코드의 ObjectId가 있습니다. 별도의 쿼리를 실행하여 제거할 수 있습니다.

Looking to insert and update records in MongoDB together? This will help you upsert documents in a single query.



Repair Windows에서 충돌 후 MongoDB 인스턴스.

결론



이 문서에서는 특정 필드별로 MongoDB 컬렉션에서 중복 문서를 찾는 방법을 자세히 설명합니다.

TLDR;
  • 중복을 찾으려는 필드별로 레코드를 그룹화합니다.
  • 모든 개체 ID를 배열에 추가합니다.
  • 문서 세기
  • 컬렉션에서 두 번 이상 사용할 수 있는 문서만 가져오기 위한 조건 적용

  • 이 기사에서 가치를 찾으시기 바랍니다. 기사가 마음에 든다면 다른 개발자에게 널리 퍼뜨리십시오. 다음 글에서 만나요 🙂

    좋은 웹페이지 즐겨찾기