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

MongoDB에서 두 배열의 교집합 구하는 방법 – $setIntersection 활용

MongoDB에서 두 배열의 교집합(공통 요소)을 구하려면 $setIntersection 연산자를 aggregate() 메서드와 함께 사용하면 됩니다. 이 연산자는 입력받은 두 개 이상의 배열에서 공통으로 존재하는 요소만 추출해 새로운 배열로 반환합니다.

1. 샘플 컬렉션 생성

먼저 데모용 컬렉션에 문서를 하나 삽입해 보겠습니다.

> db.demo61.insertOne({"Values1":[10,20,30,40,50],"Values2":[30,100,70,120,40]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e286e28cfb11e5c34d8992a")
}

2. 저장된 문서 확인

find() 메서드를 사용해 컬렉션의 모든 문서를 조회합니다.

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

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

{
   "_id" : ObjectId("5e286e28cfb11e5c34d8992a"),
   "Values1" : [
      10,
      20,
      30,
      40,
      50
   ],
   "Values2" : [
      30,
      100,
      70,
      120,
      40
   ]
}

3. $setIntersection으로 교집합 구하기

다음은 aggregate() 애그리게이션 파이프라인에서 $project 단계와 함께 $setIntersection을 사용해 두 배열의 교집합을 구하는 쿼리입니다.

> db.demo61.aggregate(
...     [
...        { $project: { BothValues:{ $setIntersection: [ "$Values1", "$Values2" ] }} }
...     ]
... );

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

{ "_id" : ObjectId("5e286e28cfb11e5c34d8992a"), "BothValues" : [ 30, 40 ] }

결과를 보면 Values1과 Values2 두 배열에 모두 포함된 값인 30과 40만 추출되어 BothValues 필드에 담긴 것을 확인할 수 있습니다. 이처럼 $setIntersection을 활용하면 별도의 복잡한 로직 없이 애그리게이션 파이프라인 안에서 간단하게 배열 간 교집합을 계산할 수 있습니다.