Docs Menu
Docs Home
/
MongoDB マニュアル
/ / / /

$slice

項目一覧

  • 動作
$slice

$slice修飾子は、 $push操作中に配列要素の数を制限します。 読み取り操作から指定された数の配列要素をプロジェクションするか、または返すには、代わりに$sliceプロジェクション演算子を参照してください。

$slice修飾子を使用するには、$each 修飾子と一緒に使用する必要があります。空の配列 []$each 修飾子に渡すと、$slice 修飾子のみが効果を発揮します。

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

<num>は次のとおりです。

説明
Zero
配列<field>を空の配列に更新します。
配列<field>を更新して、最後の<num>要素のみを含めるようにします。
正の
配列<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修飾子を使用して配列を最初の 3 つの要素に削除します。

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 修飾子、

  • 配列の 最初の 3$slice つのソートされた要素のみを保持するには、 修飾子を使用します。quizzes

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
}
}
}
)

操作後、配列には最高得点の 3 つのクイズだけが残ります。

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

修飾子の順序は、修飾子が処理される順序には影響しません。 詳細については、「修飾子」を参照してください。

戻る

$position

項目一覧