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

MongoDB 집계 프레임워크에서 특정 필드 값과 일치하는 문서 조회하기($match 활용)

MongoDB 집계 프레임워크에서 특정 필드 값 일치시키기

MongoDB의 집계 프레임워크(aggregation framework)에서 특정 필드 값과 일치하는 문서를 조회하려면 $match 스테이지를 사용합니다. 이번 글에서는 예제 컬렉션을 만들고, $match$group을 조합하여 원하는 조건의 문서를 필터링하고 개수까지 집계하는 과정을 단계별로 살펴보겠습니다.

1. 컬렉션 생성 및 문서 삽입

먼저 demo555라는 컬렉션을 생성하고, CountryName 필드를 가진 여러 문서를 삽입합니다.

> db.demo555.insertOne({"CountryName":"US"});{
   "acknowledged" : true, "insertedId" : ObjectId("5e8f21bf54b4472ed3e8e85f")
}
> db.demo555.insertOne({"CountryName":"UK"});{
   "acknowledged" : true, "insertedId" : ObjectId("5e8f21c254b4472ed3e8e860")
}
> db.demo555.insertOne({"CountryName":"US"});{
   "acknowledged" : true, "insertedId" : ObjectId("5e8f21c354b4472ed3e8e861")
}
> db.demo555.insertOne({"CountryName":"AUS"});{
   "acknowledged" : true, "insertedId" : ObjectId("5e8f21c554b4472ed3e8e862")
}
> db.demo555.insertOne({"CountryName":"US"});{
   "acknowledged" : true, "insertedId" : ObjectId("5e8f21c754b4472ed3e8e863")
}

총 5개의 문서가 삽입되었으며, 그중 CountryName"US"인 문서는 3개입니다.

2. find()로 전체 문서 확인하기

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

> db.demo555.find();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e8f21bf54b4472ed3e8e85f"), "CountryName" : "US" }
{ "_id" : ObjectId("5e8f21c254b4472ed3e8e860"), "CountryName" : "UK" }
{ "_id" : ObjectId("5e8f21c354b4472ed3e8e861"), "CountryName" : "US" }
{ "_id" : ObjectId("5e8f21c554b4472ed3e8e862"), "CountryName" : "AUS" }
{ "_id" : ObjectId("5e8f21c754b4472ed3e8e863"), "CountryName" : "US" }

3. $match로 특정 필드 값 일치시키기

이제 집계 파이프라인에서 $match를 사용해 CountryName 필드 값이 "US"인 문서만 걸러낸 뒤, $group으로 해당 문서의 개수를 합산해 보겠습니다.

> db.demo555.aggregate([
...    {$match: {CountryName: 'US'}},
...    {$group: {_id: null, Total: {$sum: 1}}}
... ])

쿼리 실행 결과는 다음과 같습니다.

{ "_id" : null, "Total" : 3 }

쿼리 동작 방식 정리

  • $match: SQL의 WHERE 절과 유사하게, 지정한 조건(CountryName: 'US')과 일치하는 문서만 다음 스테이지로 전달합니다.
  • $group: _id: null로 설정하면 통과된 모든 문서를 하나의 그룹으로 묶고, $sum: 1을 통해 문서 개수를 계산합니다.

결과적으로 Total: 3이 반환되며, 이는 CountryName이 "US"인 문서가 총 3개 존재한다는 의미입니다. 이처럼 $match를 집계 파이프라인 앞부분에 배치하면 불필요한 문서를 조기에 걸러내므로 집계 성능 최적화에도 큰 도움이 됩니다.