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을 활용하면 별도의 복잡한 로직 없이 애그리게이션 파이프라인 안에서 간단하게 배열 간 교집합을 계산할 수 있습니다.