문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

$slice

이 페이지의 내용

  • 행동
  • 예제
$slice

$slice 수정자는 $push 작업 중 배열 요소의 수를 제한합니다. 읽기 작업에서 지정된 수의 배열 요소를 프로젝션하거나 반환하려면 $slice 프로젝션 연산자를 대신 참조하세요.

수정자를 $slice 사용하려면 수정자와 함께 표시 $each 되어야 합니다 . 빈 배열 을 [] $each 수정자에 $slice 전달하여 수정자만 효과를 갖도록 할 수 있습니다.

{
$push: {
<field>: {
$each: [ <value1>, <value2>, ... ],
$slice: <num>
}
}
}

<num>은 다음과 같을 수 있습니다.

설명
제로(0)
배열 <field> 를 빈 배열로 업데이트합니다.
음수
마지막 <num> 요소만 포함하도록 <field> 배열을 업데이트합니다.
양수
배열 <field> 에 처음 <num> 요소만 포함하도록 업데이트합니다.

MongoDB 5.0부터 업데이트 연산자는 문자열 기반 이름이 있는 문서 필드를 사전순으로 처리합니다. 숫자 이름이 있는 필드는 숫자 순서대로 처리됩니다. 자세한 내용은 업데이트 운영자 동작을 참조하십시오.

수정자가 표시되는 순서는 중요하지 않습니다. 이전 버전에서는 $each 수정자를 $slice 와 함께 사용할 경우 첫 번째 수정자로 표시해야 했습니다. $push 에 사용할 수 있는 수정자 목록은 수정자를 참조하세요 .

수정자 없이 $slice $each 수정자를 사용하려고 하면 오류가 발생합니다.

컬렉션 students에는 다음 문서가 포함되어 있습니다.

{ "_id" : 1, "scores" : [ 40, 50, 60 ] }

다음 작업은 scores 배열에 새 요소를 추가한 다음 $slice 수정자를 사용하여 배열을 마지막 5개 요소로 잘라냅니다.

db.students.updateOne(
{ _id: 1 },
{
$push: {
scores: {
$each: [ 80, 78, 86 ],
$slice: -5
}
}
}
)

작업 결과는 업데이트된 scores 배열의 요소를 마지막 5개 요소로 슬라이스하는 것입니다.

{ "_id" : 1, "scores" : [ 50, 60, 80, 78, 86 ] }

컬렉션 students에는 다음 문서가 포함되어 있습니다.

{ "_id" : 2, "scores" : [ 89, 90 ] }

다음 작업은 scores 배열에 새 요소를 추가한 다음 $slice 수정자를 사용하여 배열을 처음 세 개의 요소로 잘라냅니다.

db.students.updateOne(
{ _id: 2 },
{
$push: {
scores: {
$each: [ 100, 20 ],
$slice: 3
}
}
}
)

작업 결과는 업데이트된 scores 배열의 요소를 처음 3개 요소로 슬라이스하는 것입니다.

{ "_id" : 2, "scores" : [ 89, 90, 100 ] }

컬렉션 students에는 다음 문서가 포함되어 있습니다.

{ "_id" : 3, "scores" : [ 89, 70, 100, 20 ] }

$slice 수정자의 효과만 사용하여 scores 필드를 업데이트하려면 $slice 수정자에 대해 슬라이스할 요소 수(예: -3)를 지정하고 $each 수정자에 대해 빈 배열 [] 를 지정합니다. , 다음과 같이:

db.students.updateOne(
{ _id: 3 },
{
$push: {
scores: {
$each: [ ],
$slice: -3
}
}
}
)

작업 결과는 scores 배열의 요소를 마지막 3개 요소로 슬라이스하는 것입니다.

{ "_id" : 3, "scores" : [ 70, 100, 20 ] }

다음 문서를 students 컬렉션에 추가합니다:

db.students.insertOne(
{
"_id" : 5,
"quizzes" : [
{ "wk": 1, "score" : 10 },
{ "wk": 2, "score" : 8 },
{ "wk": 3, "score" : 5 },
{ "wk": 4, "score" : 6 }
]
}
)

다음 $push 작업에서는 다음을 사용합니다.

  • quizzes 배열에 여러 문서를 추가하는 $each 수정자,

  • 수정된 quizzes 배열의 모든 요소를 score 필드를 기준으로 내림차순으로 정렬하는 $sort 수정자, 그리고

  • $slice 수정자를 사용하여 quizzes 배열의 처음 3개의 정렬된 요소만 유지합니다.

db.students.updateOne(
{ _id: 5 },
{
$push: {
quizzes: {
$each: [ { wk: 5, score: 8 }, { wk: 6, score: 7 }, { wk: 7, score: 6 } ],
$sort: { score: -1 },
$slice: 3
}
}
}
)

작업 후에는 가장 높은 점수를 받은 세 개의 퀴즈만 배열에 표시됩니다:

{
"_id" : 5,
"quizzes" : [
{ "wk" : 1, "score" : 10 },
{ "wk" : 2, "score" : 8 },
{ "wk" : 5, "score" : 8 }
]
}

수정자의 순서는 수정자가 처리되는 순서에 중요하지 않습니다. 자세한 내용은 수정자를 참조하세요.

← $position
$sort →

이 페이지의 내용