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

MongoDB 최상위 배열 조회 시 $elemMatch 대신 $in 연산자 활용 방법

MongoDB 첫 번째 수준 배열에서의 조건 검색

MongoDB에서 문서 내 최상위(첫 번째 수준) 배열을 조건으로 검색할 때는 $elemMatch 대신 $in 연산자를 사용하는 것이 좋습니다. $elemMatch는 주로 객체가 포함된 중첩 배열에서 여러 조건을 동시에 만족시키는 경우에 유용하지만, 단순한 값 배열이라면 $in이 더 간결하고 효율적입니다.

기본 문법은 다음과 같습니다.

db.yourCollectionName.find({yourFieldName:{$in:["yourValue"]}}).pretty();

1단계: 샘플 컬렉션 생성

먼저 문서를 포함하는 컬렉션을 생성해 보겠습니다.

> db.firstLevelArrayDemo.insertOne({"StudentName":"Chris","StudentTechnicalSkills":["MongoDB","MySQL","SQL Server"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ca2360f66324ffac2a7dc71")
}
> db.firstLevelArrayDemo.insertOne({"StudentName":"Robert","StudentTechnicalSkills":["C","Java","C++"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ca2362766324ffac2a7dc72")
}

위 명령은 학생 이름과 기술 스킬 목록을 담은 두 개의 문서를 firstLevelArrayDemo 컬렉션에 삽입합니다.

2단계: 전체 문서 확인

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

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

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

{
    "_id" : ObjectId("5ca2360f66324ffac2a7dc71"),
    "StudentName" : "Chris",
    "StudentTechnicalSkills" : [
        "MongoDB",
        "MySQL",
        "SQL Server"
    ]
}
{
    "_id" : ObjectId("5ca2362766324ffac2a7dc72"),
    "StudentName" : "Robert",
    "StudentTechnicalSkills" : [
        "C",
        "Java",
        "C++"
    ]
}

3단계: 최상위 배열 조건 매칭 쿼리 실행

이제 $in 연산자를 사용하여 최상위 배열에서 특정 값을 가진 문서만 조회해 보겠습니다.

> db.firstLevelArrayDemo.find({StudentTechnicalSkills:{$in:["MongoDB"]}}).pretty();

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

{
    "_id" : ObjectId("5ca2360f66324ffac2a7dc71"),
    "StudentName" : "Chris",
    "StudentTechnicalSkills" : [
        "MongoDB",
        "MySQL",
        "SQL Server"
    ]
}

정리

$in 연산자를 활용하면 배열 필드에 특정 값이 포함되어 있는지 손쉽게 확인할 수 있습니다. 위 예제에서는 StudentTechnicalSkills 배열에 "MongoDB"가 포함된 Chris의 문서만 정확히 필터링되어 반환된 것을 확인할 수 있습니다. 참고로 여러 값을 동시에 검색하려면 {$in:["MongoDB", "MySQL"]}처럼 배열 안에 값을 추가하면 됩니다.