Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 필드의 중복 값을 조회하는 방법

MongoDB에서 필드의 중복 값 찾기

MongoDB에서 특정 필드에 중복된 값이 있는지 확인하고 싶다면 aggregate() 메서드를 활용하면 됩니다. 이 글에서는 실제 예제를 통해 컬렉션을 생성하고, 중복된 값을 가진 문서를 효과적으로 조회하는 방법을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 다음 쿼리를 사용하여 문서가 포함된 컬렉션을 생성합니다. 여러 개의 insertOne() 호출을 통해 이름이 중복되는 데이터를 미리 넣어두겠습니다.

> db.findAllNonDistinctDemo.insertOne({"UserName":"John","UserAge":28});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c995078863d6ffd454bb647")
}
> db.findAllNonDistinctDemo.insertOne({"UserName":"Larry","UserAge":21});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c995081863d6ffd454bb648")
}
> db.findAllNonDistinctDemo.insertOne({"UserName":"Larry","UserAge":23});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c995089863d6ffd454bb649")
}
> db.findAllNonDistinctDemo.insertOne({"UserName":"David","UserAge":22});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c995093863d6ffd454bb64a")
}
> db.findAllNonDistinctDemo.insertOne({"UserName":"John","UserAge":26});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c99509d863d6ffd454bb64b")
}
> db.findAllNonDistinctDemo.insertOne({"UserName":"Robert","UserAge":24});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9950a7863d6ffd454bb64c")
}
> db.findAllNonDistinctDemo.insertOne({"UserName":"Robert","UserAge":25});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9950b1863d6ffd454bb64d")
}
> db.findAllNonDistinctDemo.insertOne({"UserName":"Mike","UserAge":29});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9950bc863d6ffd454bb64e")
}

위 쿼리를 실행하면 총 8개의 문서가 저장되며, John, Larry, Robert는 각각 두 번씩 등록됩니다.

2. 저장된 전체 문서 확인하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

> db.findAllNonDistinctDemo.find().pretty();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{
   "_id" : ObjectId("5c995078863d6ffd454bb647"),
   "UserName" : "John",
   "UserAge" : 28
}
{
   "_id" : ObjectId("5c995081863d6ffd454bb648"),
   "UserName" : "Larry",
   "UserAge" : 21
}
{
   "_id" : ObjectId("5c995089863d6ffd454bb649"),
   "UserName" : "Larry",
   "UserAge" : 23
}
{
   "_id" : ObjectId("5c995093863d6ffd454bb64a"),
   "UserName" : "David",
   "UserAge" : 22
}
{
   "_id" : ObjectId("5c99509d863d6ffd454bb64b"),
   "UserName" : "John",
   "UserAge" : 26
}
{
   "_id" : ObjectId("5c9950a7863d6ffd454bb64c"),
   "UserName" : "Robert",
   "UserAge" : 24
}
{
   "_id" : ObjectId("5c9950b1863d6ffd454bb64d"),
   "UserName" : "Robert",
   "UserAge" : 25
}
{
   "_id" : ObjectId("5c9950bc863d6ffd454bb64e"),
   "UserName" : "Mike",
   "UserAge" : 29
}

3. aggregate()로 중복 값 조회하기

이제 핵심 단계입니다. MongoDB에서 특정 필드의 모든 중복 값을 찾으려면 집계 파이프라인(aggregate pipeline)에서 $group$match 연산자를 조합하여 사용합니다.

  • $group: UserName 필드를 기준으로 그룹화하고, $sum: 1을 통해 각 이름이 몇 번 나타나는지 카운트합니다.
  • $match: 카운트 값이 1보다 큰 경우, 즉 두 번 이상 등장한 값만 필터링합니다.
> db.findAllNonDistinctDemo.aggregate([
...    { "$group": {
...       "_id": "$UserName",
...       "Counter": { "$sum": 1 }
...    }},
...    { "$match": {
...       "Counter": { "$gt": 1 }
...    }}
... ]).pretty();

4. 실행 결과

위 쿼리를 실행하면 다음과 같은 결과가 출력되며, 중복된 레코드들이 한눈에 확인됩니다.

{ "_id" : "Robert", "Counter" : 2 }
{ "_id" : "Larry", "Counter" : 2 }
{ "_id" : "John", "Counter" : 2 }

정리

MongoDB에서 필드의 중복 값을 찾는 방법은 매우 간단합니다. aggregate() 파이프라인에서 $group으로 해당 필드를 기준으로 묶고 $sum: 1로 개수를 센 뒤, $match$gt: 1 조건으로 2회 이상 등장하는 값만 걸러내면 됩니다. 이 방식은 대용량 데이터에서도 효율적으로 동작하므로, 데이터 정합성 검사나 중복 데이터 정리 작업에 유용하게 활용할 수 있습니다.