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

MongoDB에서 배열 필드의 첫 번째 요소만 가져오는 방법 – $slice 연산자 활용 가이드

MongoDB에서 배열 속성의 첫 번째 항목만 가져오기

MongoDB에서 배열(Array) 타입 필드에 저장된 값 중 첫 번째 요소만 조회하고 싶다면 $slice 연산자를 사용하면 됩니다. $slice는 프로젝션(projection) 단계에서 배열의 일부만 잘라내어 반환해 주는 연산자로, 원하는 개수만큼의 배열 요소를 손쉽게 가져올 수 있습니다.

1. 샘플 컬렉션 생성

먼저 테스트용 컬렉션을 만들고 문서를 하나 삽입해 보겠습니다.

> db.gettingFirstItemInArrayDemo.insertOne(
    {
        "UserId": 101,
        "UserName":"Carol",
        "UserOtherDetails": [
            {"UserFriendName":"Sam"},
            {"UserFriendName":"Mike"},
            {"UserFriendName":"David"},
            {"UserFriendName":"Bob"}
        ]
    }
);
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cdfca52bf3115999ed51205")
}

문서가 정상적으로 삽입되면 위와 같이 acknowledged 값이 true로 반환됩니다.

2. 전체 문서 확인하기

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

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

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

{
    "_id" : ObjectId("5cdfca52bf3115999ed51205"),
    "UserId" : 101,
    "UserName" : "Carol",
    "UserOtherDetails" : [
        {
            "UserFriendName" : "Sam"
        },
        {
            "UserFriendName" : "Mike"
        },
        {
            "UserFriendName" : "David"
        },
        {
            "UserFriendName" : "Bob"
        }
    ]
}

현재 UserOtherDetails 배열에는 Sam, Mike, David, Bob 네 명의 친구 정보가 순서대로 저장되어 있는 것을 확인할 수 있습니다.

3. $slice로 배열의 첫 번째 항목만 조회하기

이제 $slice 연산자를 활용해 배열 속성에서 첫 번째 항목만 가져오는 방법을 살펴보겠습니다. find() 메서드의 두 번째 인자인 프로젝션 부분에 {필드명: {$slice: 1}} 형태로 지정하면 됩니다.

> db.gettingFirstItemInArrayDemo.find({"UserId":101}, {UserOtherDetails:{$slice: 1}});

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

{ "_id" : ObjectId("5cdfca52bf3115999ed51205"), "UserId" : 101, "UserName" : "Carol", "UserOtherDetails" : [ { "UserFriendName" : "Sam" } ] }

출력 결과를 보면 UserOtherDetails 배열에서 첫 번째 요소인 Sam의 정보만 반환된 것을 확인할 수 있습니다.

마무리: $slice 연산자의 다양한 활용

$slice 값으로 1을 지정하면 배열의 첫 번째 항목만 가져옵니다. 이 외에도 다양한 방식으로 활용할 수 있습니다.

  • {$slice: -1} — 배열의 마지막 요소 하나만 반환
  • {$slice: 5} — 배열의 처음부터 5개 요소 반환
  • {$slice: [2, 3]} — 세 번째 요소부터 3개의 요소 건너뛰기 후 반환

배열 데이터를 효율적으로 다루고 싶을 때 $slice 연산자는 매우 유용한 도구이므로 꼭 기억해 두시기 바랍니다.