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 연산자는 매우 유용한 도구이므로 꼭 기억해 두시기 바랍니다.