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

MongoDB에서 반환 형식을 지정해 값을 배열로 가져오는 방법

MongoDB에서 여러 문서의 특정 필드 값을 하나의 배열 형태로 반환하고 싶다면 집계(Aggregation) 기능을 활용하면 됩니다. $group 단계와 $addToSet 연산자를 함께 사용하면 각 문서에 흩어져 있는 값들을 손쉽게 하나의 배열로 모을 수 있습니다.

1. 샘플 컬렉션 생성

먼저 실습에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.

> db.specifyReturnFormatDemo.insertOne({"Subject":"MongoDB"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cefd364ef71edecf6a1f6c0")
}
> db.specifyReturnFormatDemo.insertOne({"Subject":"MySQL"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cefd369ef71edecf6a1f6c1")
}
> db.specifyReturnFormatDemo.insertOne({"Subject":"SQL Server"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cefd36fef71edecf6a1f6c2")
}

2. 저장된 문서 확인하기

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

> db.specifyReturnFormatDemo.find();

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

출력 결과

{ "_id" : ObjectId("5cefd364ef71edecf6a1f6c0"), "Subject" : "MongoDB" }
{ "_id" : ObjectId("5cefd369ef71edecf6a1f6c1"), "Subject" : "MySQL" }
{ "_id" : ObjectId("5cefd36fef71edecf6a1f6c2"), "Subject" : "SQL Server" }

3. 집계 파이프라인으로 배열 형식 지정하기

이제 aggregate() 메서드를 사용해 Subject 필드의 값들을 하나의 배열로 묶어 반환해 보겠습니다. $group에서 _id를 0으로 설정하면 전체 문서를 하나의 그룹으로 묶고, $addToSet이 중복 없이 각 값을 배열에 추가합니다. 마지막으로 $project 단계에서 불필요한 _id 필드를 제외합니다.

> db.specifyReturnFormatDemo.aggregate([
    {
        "$group": {
            "_id": 0,
            "Subject": {
                "$addToSet": "$Subject"
            }
        }
    },
    {
        "$project": {
            "_id": 0,
            "Subject": 1
        }
    }
]);

출력 결과

{ "Subject" : [ "SQL Server", "MySQL", "MongoDB" ] }

실행 결과를 보면 세 개의 개별 문서에 담겨 있던 과목 이름들이 하나의 배열로 깔끔하게 반환된 것을 확인할 수 있습니다.

참고 사항

$addToSet은 중복 값을 자동으로 제거하며, 배열 내 요소의 순서는 보장되지 않습니다. 만약 중복 값을 포함한 채 순서대로 배열을 만들고 싶다면 $push 연산자를 대신 사용하면 됩니다. 또한 MongoDB 5.0 이상에서는 $documents, $sort 등의 단계를 조합해 원하는 순서로 정렬된 배열을 얻을 수도 있습니다.