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

$push

項目一覧

  • 定義
  • 互換性
  • 構文
  • 動作
  • Modifiers
$push

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Modifier
説明
配列フィールドに複数の値を追加します。
配列要素の数を制限します。$each 修飾子を使用する必要があります。
配列の要素を順序付けます。$each 修飾子を使用する必要があります。
配列内で新しい要素を挿入するロケーションを指定します。$each 修飾子を使用する必要があります。$position 修飾子がない場合、$push は要素を配列の末尾に追加します。

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

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

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

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

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

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

  4. 配列を保存します。

students コレクションを次のように作成します。

db.students.insertOne( { _id: 1, scores: [ 44, 78, 38, 80 ] } )

次の例では、89scores 配列に追加します。

db.students.updateOne(
{ _id: 1 },
{ $push: { scores: 89 } }
)

出力例:

{ _id: 1, scores: [ 44, 78, 38, 80, 89 ] }

次のドキュメントを students コレクションに追加します。

db.students.insertMany( [
{ _id: 2, scores: [ 45, 78, 38, 80, 89 ] } ,
{ _id: 3, scores: [ 46, 78, 38, 80, 89 ] } ,
{ _id: 4, scores: [ 47, 78, 38, 80, 89 ] }
] )

次の $push 操作では、各ドキュメントの scores 配列に 95 を追加します。

db.students.updateMany(
{ },
{ $push: { scores: 95 } }
)

scores 配列に 95 が含まれていることを確認するには、次の操作を実行します。

db.students.find()

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

[
{ _id: 1, scores: [ 44, 78, 38, 80, 89, 95 ] },
{ _id: 2, scores: [ 45, 78, 38, 80, 89, 95 ] },
{ _id: 3, scores: [ 46, 78, 38, 80, 89, 95 ] },
{ _id: 4, scores: [ 47, 78, 38, 80, 89, 95 ] }
]

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

次の例では、name フィールドが joe に等しいドキュメントの scores 配列に [ 90, 92, 85 ] の各要素を追加します。

db.students.updateOne(
{ name: "joe" },
{ $push: { scores: { $each: [ 90, 92, 85 ] } } }
)

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