$[identifier] (条件付き位置演算子)

最終更新:2026-10-09

$[identifier] (条件付き位置演算子)

$[identifier] は、arrayFilters と組み合わせて、条件に一致する配列要素だけを更新する位置演算子です。`{ $set: { 'grades.$[elem]': 90 } }, { arrayFilters: [{ 'elem.grade': { $gte: 85 } }] }` のように使います。MongoDB 3.6 で導入された最も柔軟な配列更新で、識別子は arrayFilters で定義し、ネストしたドキュメントのフィールドにも一致させられます。

カテゴリ更新修飾子
MongoDB バージョン3.6+
例の言語mongosh(シェル)

📝 構文

{ <update operator>: { '<array field>.$[<identifier>]': <value> } }, { arrayFilters: [ { '<identifier>.<field>': <condition> } ] }

⚙️ パラメータ

配列フィールド更新する配列フィールド。
識別子arrayFilters で定義されるプレースホルダー(例: elem)。
arrayFilters識別子の一致規則を定義する条件配列。

戻り値:更新結果

▶ 例

以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):

// $[elem]: 85 以上のグレードだけを更新
// arrayFilters で elem のルールを定義
db.students.updateOne(
  { _id: 1 },
  { $set: { 'grades.$[elem]': 100 } },
  { arrayFilters: [{ 'elem': { $gte: 85 } }] }
)

出力:

// 85 以上のグレードだけが 100 になり、それ以外は変更されない

📌 注意事項

さらなる実践ケースを近日公開予定。

📚 関連チュートリアル

❓ よくある質問

Q$[elem] と $[] の違いは?
A$[] はすべての要素を更新します。$[elem] は arrayFilters で条件に一致する要素だけを更新します。
QarrayFilters はどう書きますか?
A{ arrayFilters: [{ 'elem': { $gte: 85 } }] } のように書きます。識別子には $ プレフィックスを付けません。
Qネストしたフィールドでフィルターできますか?
Aはい。たとえば { 'elem.type': 'exam' } のように指定できます。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%