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

MongoDB에서 $in 연산자로 배열 필드에 특정 값이 있는지 확인하는 방법

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은 단일 값 검사뿐 아니라 복수 값 조건 검색에도 유용하게 활용됩니다.