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

MongoDB에서 두 필드의 합을 기준으로 문서를 검색하는 방법

MongoDB에서 두 개의 속성(필드) 값을 더한 결과를 기준으로 문서를 검색하려면 애그리게이션 프레임워크(Aggregation Framework)를 활용하는 것이 가장 효과적입니다. 이 글에서는 $add 연산자로 두 필드의 합계를 계산한 뒤, $match 단계에서 특정 숫자보다 작은 값의 문서만 필터링하는 방법을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 실습에 사용할 문서들이 담긴 컬렉션을 생성합니다. 각 문서는 Value1Value2라는 두 개의 숫자 필드를 가지고 있습니다.

> db.searchDocumentsDemo.insertOne({"Value1":100,"Value2":560});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd3fe1eedc6604c74817ce9")
}
> db.searchDocumentsDemo.insertOne({"Value1":300,"Value2":150});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd3fe29edc6604c74817cea")
}
> db.searchDocumentsDemo.insertOne({"Value1":400,"Value2":200});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd3fe30edc6604c74817ceb")
}
> db.searchDocumentsDemo.insertOne({"Value1":190,"Value2":210});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd3fe45edc6604c74817cec")
}

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

find() 메서드와 pretty()를 함께 사용하면 컬렉션에 저장된 모든 문서를 보기 좋게 출력할 수 있습니다.

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

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

{
    "_id" : ObjectId("5cd3fe1eedc6604c74817ce9"),
    "Value1" : 100,
    "Value2" : 560
}
{
    "_id" : ObjectId("5cd3fe29edc6604c74817cea"),
    "Value1" : 300,
    "Value2" : 150
}
{
    "_id" : ObjectId("5cd3fe30edc6604c74817ceb"),
    "Value1" : 400,
    "Value2" : 200
}
{
    "_id" : ObjectId("5cd3fe45edc6604c74817cec"),
    "Value1" : 190,
    "Value2" : 210
}

3. 두 필드의 합을 기준으로 문서 검색하기

이제 핵심 부분입니다. 애그리게이션 파이프라인에서 $project 단계로 Value1Value2를 더한 새로운 필드 totalValue를 만들고, 이어지는 $match 단계에서 totalValue가 500 미만인 문서만 걸러냅니다.

> db.searchDocumentsDemo.aggregate([
...    { $project: {totalValue: { $add: [ "$Value1", "$Value2" ] } } },
...    { $match: {totalValue: {$lt: 500 }} }
... ]);

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

{ "_id" : ObjectId("5cd3fe29edc6604c74817cea"), "totalValue" : 450 }
{ "_id" : ObjectId("5cd3fe45edc6604c74817cec"), "totalValue" : 400 }

결과 분석

네 개의 문서 중 두 개만 조회되었습니다. 각 문서의 합계를 계산해 보면 그 이유를 알 수 있습니다.

  • 100 + 560 = 660 → 조건 불일치 (500 이상)
  • 300 + 150 = 450 → 조건 일치
  • 400 + 200 = 600 → 조건 불일치 (500 이상)
  • 190 + 210 = 400 → 조건 일치

마무리

이처럼 MongoDB에서는 여러 필드를 연산한 결과를 기준으로 문서를 조회해야 할 때, 일반적인 find() 쿼리 대신 애그리게이션 파이프라인을 사용해야 합니다. $project로 계산 필드를 만들고 $match로 필터링하는 이 패턴은 합계뿐 아니라 평균($avg), 곱셈($multiply) 등 다양한 산술 연산에도 동일하게 응용할 수 있으니 꼭 기억해 두시기 바랍니다.