MongoDB에서 배열(Array) 타입의 필드에 특정 값이 포함되어 있는지 확인하고 싶다면 $in 연산자를 사용하면 됩니다. $in은 지정한 값 목록 중 하나라도 배열 안에 존재하는 경우 해당 문서를 조회 결과로 반환합니다.
아래에서 실제 예제를 통해 컬렉션 생성부터 값 존재 여부 확인까지 단계별로 살펴보겠습니다.
1. 테스트용 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용해 예제 데이터를 저장할 컬렉션을 만듭니다. 각 문서는 사용자 이름(UserName)과 메시지 배열(UserMessage)을 가지고 있습니다.
> db.valueInArrayDemo.insertOne({"UserName":"John","UserMessage":["Hi","Hello","Bye"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd684cf7924bb85b3f48959")
}
> db.valueInArrayDemo.insertOne({"UserName":"Larry","UserMessage":["Thank You","Amazing","Nice"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd684d27924bb85b3f4895a")
}
> db.valueInArrayDemo.insertOne({"UserName":"Carol","UserMessage":["Awesome","Bye","Cool"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd684d87924bb85b3f4895b")
}2. find() 메서드로 전체 문서 조회하기
컬렉션에 저장된 모든 문서를 확인하려면 find() 메서드를 사용합니다. pretty()를 함께 호출하면 결과가 보기 좋게 정렬되어 출력됩니다.
> db.valueInArrayDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
{
"_id" : ObjectId("5cd684cf7924bb85b3f48959"),
"UserName" : "John",
"UserMessage" : [
"Hi",
"Hello",
"Bye"
]
}
{
"_id" : ObjectId("5cd684d27924bb85b3f4895a"),
"UserName" : "Larry",
"UserMessage" : [
"Thank You",
"Amazing",
"Nice"
]
}
{
"_id" : ObjectId("5cd684d87924bb85b3f4895b"),
"UserName" : "Carol",
"UserMessage" : [
"Awesome",
"Bye",
"Cool"
]
}3. $in 연산자로 배열 내 특정 값 존재 여부 확인하기
이제 핵심인 $in 연산자를 사용해 보겠습니다. UserMessage 배열에 "Bye"라는 값이 포함된 문서만 조회하는 쿼리는 다음과 같습니다.
> db.valueInArrayDemo.find({UserMessage:{$in:["Bye"]}});실행 결과, "Bye" 값을 가진 John과 Carol의 문서만 반환됩니다. Larry의 문서에는 "Bye"가 없기 때문에 결과에서 제외됩니다.
{ "_id" : ObjectId("5cd684cf7924bb85b3f48959"), "UserName" : "John", "UserMessage" : [ "Hi", "Hello", "Bye" ] }
{ "_id" : ObjectId("5cd684d87924bb85b3f4895b"), "UserName" : "Carol", "UserMessage" : [ "Awesome", "Bye", "Cool" ] }추가 팁: 여러 값 동시에 확인하기
$in 연산자는 배열 형태로 여러 개의 값을 전달할 수 있어, 한 번의 쿼리로 여러 값 중 하나라도 포함된 문서를 찾을 수 있습니다.
> db.valueInArrayDemo.find({UserMessage:{$in:["Hi", "Cool"]}});위 쿼리는 "Hi" 또는 "Cool" 중 하나라도 UserMessage 배열에 포함된 모든 문서를 반환합니다. 이처럼 $in은 단일 값 검사뿐 아니라 복수 값 조건 검색에도 유용하게 활용됩니다.