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

MongoDB에서 필드 내 문자열 또는 숫자 검색하기 – $in 연산자 활용법

MongoDB에서 문자열 또는 숫자를 동시에 검색하는 방법

MongoDB에서 특정 필드에 저장된 값이 문자열인지 숫자인지 구분하지 않고 두 가지 형태를 모두 검색하고 싶다면 $in 연산자를 사용하면 됩니다. $in 연산자는 지정한 배열에 포함된 값 중 하나라도 일치하는 문서를 모두 반환해 주기 때문에, 데이터 타입이 섞여 있는 경우에도 간편하게 조회할 수 있습니다.

1. 테스트용 컬렉션 생성

먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다. 아래 예제에서는 동일한 값 44가 한 문서에는 숫자형으로, 다른 문서에는 문자열로 저장되어 있습니다.

> db.searchForStringOrNumberDemo.insertOne(
    {
        "_id": new ObjectId(),
        "StudentName": "Larry",
        "StudentDetails": {
            "StudentMarks": {
                "StudentMongoDBMarks": [44]
            }
        }
    }
);
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ce2407c36e8b255a5eee944")
}
> db.searchForStringOrNumberDemo.insertOne( { "_id": new ObjectId(), "StudentName": "Larry", "StudentDetails": { "StudentMarks": { "StudentMongoDBMarks": ["44"] } } } );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ce240f036e8b255a5eee945")
}

2. 저장된 문서 전체 조회

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

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

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

{
    "_id" : ObjectId("5ce2407c36e8b255a5eee944"),
    "StudentName" : "Larry",
    "StudentDetails" : {
        "StudentMarks" : {
            "StudentMongoDBMarks" : [
                44
            ]
        }
    }
}
{
    "_id" : ObjectId("5ce240f036e8b255a5eee945"),
    "StudentName" : "Larry",
    "StudentDetails" : {
        "StudentMarks" : {
            "StudentMongoDBMarks" : [
                "44"
            ]
        }
    }
}

첫 번째 문서에는 숫자형 44가, 두 번째 문서에는 문자열 "44"가 저장된 것을 확인할 수 있습니다.

3. $in 연산자로 문자열 또는 숫자 검색하기

이제 $in 연산자를 사용하여 해당 필드에서 문자열 "44"와 숫자 44를 동시에 검색하는 쿼리를 살펴보겠습니다.

> db.searchForStringOrNumberDemo.find({"StudentDetails.StudentMarks.StudentMongoDBMarks": { "$in": ["44",44] } });

위 쿼리를 실행하면 숫자형 44가 저장된 문서와 문자열 "44"가 저장된 문서가 모두 반환됩니다.

{ "_id" : ObjectId("5ce2407c36e8b255a5eee944"), "StudentName" : "Larry", "StudentDetails" : { "StudentMarks" : { "StudentMongoDBMarks" : [ 44 ] } } }

{ "_id" : ObjectId("5ce240f036e8b255a5eee945"), "StudentName" : "Larry", "StudentDetails" : { "StudentMarks" : { "StudentMongoDBMarks" : [ "44" ] } } }

마무리

이처럼 MongoDB의 $in 연산자를 활용하면 데이터 타입이 서로 다른 값(문자열과 숫자)을 별도의 쿼리 없이 하나의 조건으로 손쉽게 검색할 수 있습니다. 입력 데이터의 타입이 일관되지 않은 환경에서 특히 유용하게 활용할 수 있는 패턴이므로 꼭 기억해 두시기 바랍니다.