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"]
)을 선택합니다.