15. MongoDB Query Part 5. - $slice

이번 포스팅에서는 $slice keyword를 이용한 검색 조건에 대하여 알아보도록 하겠습니다.

$slice는 특정 key의 array 아이템들 중 일부분을 추출하는데 사용됩니다.

가령, 다음과 같이 아이템이 있다고 하겠습니다.

> db.food.drop()
> db.food.insert({
  "fruit": [
    "apple",
    "orange",
    "plum",
    "banana",
    "peach",
    "mango",
    "pineapple",
    "grape",
    "melon",
    "water melon",
    "cherry",
    "kiwi",
    "strawberry"
  ]
})

"fruit" 중 처음 다섯개의 아이템을 추출하려면 다음과 같은 입력합니다.

> db.food.find( {}, { fruit: { $slice: 5 } } )
{ "_id" : ObjectId("52ece5ebf97299c19188c2da"), "fruit" : [  "apple",  "orange",  "plum",  "banana",  "peach" ] }

반대로 마지막 다섯개의 아이템을 추출하려면 $slice 값을 5대신 -5로 입력합니다.

> db.food.find( {}, { fruit: { $slice: -5 } } )
{ "_id" : ObjectId("52ece5ebf97299c19188c2da"), "fruit" : [  "melon",  "water melon",  "cherry",  "kiwi",  "strawberry" ] }

이번에는 skip & limit에 대해 알아보록 하겠습니다.

때때로 몇가지 아이템을 스킵한 후 아이템을 추출할 필요가 있는 경우가 있습니다.

다음을 입력해 보겠습니다:

> db.food.findOne()
{
        "_id" : ObjectId("52ece5ebf97299c19188c2da"),
        "fruit" : [
                "apple",
                "orange",
                "plum",
                "banana",
                "peach",
                "mango",
                "pineapple",
                "grape",
                "melon",
                "water melon",
                "cherry",
                "kiwi",
                "strawberry"
        ]
}

위는 과일 이름을 순서대로 잘 볼 수 있기 위해 입력한 것입니다.

처음 3개의 아이템을 스킵하고 5개의 아이템을 추출하면 다음과 같습니다:

> db.food.findOne( {}, { fruit: { $slice: [3, 5] } } )
{
        "_id" : ObjectId("52ece5ebf97299c19188c2da"),
        "fruit" : [
                "banana",
                "peach",
                "mango",
                "pineapple",
                "grape"
        ]
}

마찬가지로 뒤에서부터 7개의 아이템을 스킵하고 그 위치로부터 2개의 아이템을 추출하면 다음과 같이 입력합니다:

> db.food.findOne( {}, { fruit: { $slice: [-7, 2] } } )
{
        "_id" : ObjectId("52ece5ebf97299c19188c2da"),
        "fruit" : [
                "pineapple",
                "grape"
        ]
}

즉, 뒤에서부터 7번째 위치로 이동한 후(fruit: "pineapple") 이 위치로부터 2개의 아이템(fruit: ["pineapple", "grape"])을 선택합니다.