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

MongoDB 배열(리스트) 필드 조회 방법 – find(), $and, $or 연산자 완벽 정리

MongoDB에서는 하나의 필드에 여러 개의 값을 배열(리스트) 형태로 저장할 수 있습니다. 이 글에서는 이러한 배열 필드를 대상으로 조건에 맞는 문서를 조회하는 다양한 방법을 실제 예제와 함께 단계별로 살펴봅니다. 특정 값이 포함된 문서 찾기부터 $and, $or 연산자를 활용한 복합 조건 조회까지 모두 다룹니다.

1. 샘플 컬렉션 생성하기

배열 필드 조회를 이해하기 위해 먼저 문서가 포함된 컬렉션을 만들어 보겠습니다. 아래 쿼리는 학생 이름(StudentName)과 점수 배열(StudentScore)을 저장하는 andOrDemo 컬렉션에 두 개의 문서를 삽입합니다.

> db.andOrDemo.insertOne({"StudentName":"Larry","StudentScore":[33,40,50,60,70]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9522d316f542d757e2b444")
}
> db.andOrDemo.insertOne({"StudentName":"Larry","StudentScore":[87,67,79,98,90]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c95230916f542d757e2b445")
}

2. 저장된 전체 문서 확인하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다. pretty()를 함께 사용하면 결과를 읽기 좋게 정렬해서 출력해 줍니다.

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

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

{
    "_id" : ObjectId("5c9522d316f542d757e2b444"),
    "StudentName" : "Larry",
    "StudentScore" : [
        33,
        40,
        50,
        60,
        70
    ]
}
{
    "_id" : ObjectId("5c95230916f542d757e2b445"),
    "StudentName" : "Larry",
    "StudentScore" : [
        87,
        67,
        79,
        98,
        90
    ]
}

3. 배열 필드에서 특정 값 조회하기

배열 필드를 조회할 때는 일반 필드와 똑같이 값을 지정하면 됩니다. MongoDB는 자동으로 배열 내부의 요소들을 순회하면서, 일치하는 값이 하나라도 존재하면 해당 문서를 반환합니다. 아래 쿼리는 점수 배열에 70이 포함된 문서를 찾습니다.

> db.andOrDemo.find({"StudentScore":70}).pretty();

실행 결과:

{
    "_id" : ObjectId("5c9522d316f542d757e2b444"),
    "StudentName" : "Larry",
    "StudentScore" : [
        33,
        40,
        50,
        60,
        70
    ]
}

4. $and 연산자로 AND 조건 조회하기

배열에 여러 값이 모두 포함되어 있는지 확인하려면 $and 연산자를 사용합니다. 아래 쿼리는 점수 배열에 60과 70이 동시에 포함된 문서만 반환합니다.

> db.andOrDemo.find({"$and":[{"StudentScore":60},{"StudentScore":70}]}).pretty();

두 번째 문서에는 60과 70이 없으므로, 첫 번째 문서만 결과로 출력됩니다.

5. $or 연산자로 OR 조건 조회하기

반대로, 여러 값 중 하나라도 포함된 문서를 찾으려면 $or 연산자를 사용하면 됩니다. 아래 쿼리는 점수 배열에 60 또는 90이 포함된 모든 문서를 반환합니다.

> db.andOrDemo.find({"$or":[ {"StudentScore":60}, {"StudentScore":90}]}).pretty();

실행 결과:

{
    "_id" : ObjectId("5c9522d316f542d757e2b444"),
    "StudentName" : "Larry",
    "StudentScore" : [
        33,
        40,
        50,
        60,
        70
    ]
}
{
    "_id" : ObjectId("5c95230916f542d757e2b445"),
    "StudentName" : "Larry",
    "StudentScore" : [
        87,
        67,
        79,
        98,
        90
    ]
}

참고: 같은 필드의 OR 조건은 $in이 더 효율적입니다

위처럼 동일한 필드에 대해 여러 값을 OR 조건으로 검색할 때는 $in 연산자를 사용하는 것이 더 간결하고 성능 면에서도 유리합니다. 아래 쿼리는 앞선 $or 예제와 완전히 동일한 결과를 반환합니다.

> db.andOrDemo.find({"StudentScore":{"$in":[60,90]}}).pretty();

지금까지 MongoDB에서 배열(리스트) 필드를 조회하는 기본 방법과 $and, $or, $in 연산자를 활용한 복합 조건 조회 방법을 살펴보았습니다. 배열 필드는 일반 필드처럼 직관적으로 쿼리할 수 있다는 점을 기억하면, 실무에서 훨씬 수월하게 데이터를 다룰 수 있습니다.