Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$push(更新演算子)

$push

$push 演算子は指定された値を配列に追加します。

次の環境でホストされる配置には $push を使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

$push 演算子の形式は次のとおりです。

{ $push: { <field1>: <value1>, ... } }

<field> を埋め込みドキュメントまたは配列で指定するには、ドット表記を使用します。

MongoDB 5.0 以降、更新演算子では名前が文字列ベースのドキュメントフィールドを辞書順に処理します。数値名のフィールドは、数値順に処理されます。詳細については、「更新演算子の動作」を参照してください。

更新するドキュメントにフィールドがない場合、$push は、値を要素として配列フィールドを追加します。

フィールドが配列で ない 場合、操作は失敗します。

値が配列の場合、$push は配列全体を 単一の 要素として追加します。値の各要素を個別に追加するには、 とともに$each $push修飾子を使用します。例については、「 配列への複数の値の追加 」を参照してください。$push で使用できる修飾子の一覧については、「 修飾子 」を参照してください。

MongoDB 5.0 以降、$pushなどの更新演算子を空のオペランド式({ })と併用しても、mongod でエラーが発生しなくなりました。空の更新を使用すると変更は一切されず、oplog エントリも作成されません(操作は実行されません)。

$push 演算子は、次の修飾子とともに使用できます。

Modifier
説明

配列フィールドに複数の値を追加します。

配列要素の数を制限します。$each 修飾子を使用する必要があります。

配列の要素を順序付けます。$each 修飾子を使用する必要があります。

配列内で新しい要素を挿入するロケーションを指定します。 $each修飾子を使用する必要があります。$position修飾子がない場合、$push は要素を配列の末尾に追加します。

修飾子とともに使用する場合、 $push 演算子は次の形式になります。

{ $push: { <field1>: { <modifier1>: <value1>, ... }, ... } }

修飾子を使用した $push 操作の処理では、修飾子の出現順序に関係なく、次の順序で実行されます。

  1. 配列を更新して、正しい位置に要素を追加します。

  2. 指定されている場合は、ソートします。

  3. 指定されている場合は、配列をスライスします。

  4. 配列を保存します。

このページの例では、sample_mflixサンプルデータセットのデータを使用します。このデータセットを自己管理型MongoDB配置にロードする方法の詳細については、サンプルデータセットをロードする を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。

$push"Classic"次の例では、genres 演算子を使用して、一致する映画ドキュメントの 配列に を追加します。

db.movies.updateOne(
{ title: "The Dark Knight" },
{ $push: { genres: "Classic" } }
)

この操作では、次の結果を返します。

{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}

$push"Acclaimed"次の例では、genres 演算子を使用して、一致するすべての映画ドキュメントの 配列に を追加します。

db.movies.updateMany(
{ "imdb.rating": { $gt: 9 } },
{ $push: { genres: "Acclaimed" } }
)

この操作では、次の結果を返します。

{
acknowledged: true,
insertedId: null,
matchedCount: '...',
modifiedCount: '...',
upsertedCount: 0
}

$push$each 修飾子と共に使用して、配列フィールドに複数の値を追加します。

db.movies.updateOne(
{ title: "The Dark Knight" },
{ $push: { genres: { $each: [ "Modern Classic", "Award-Winning" ] } } }
)

この操作では、次の結果を返します。

{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}

次のドキュメントを 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 修飾子、

  • quizzes 配列の最初の 3 つのソートされた要素のみを保持するための $slice 修飾子。

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

Tip

戻る

$pull

項目一覧