$elemMatch (配列要素のマッチ)

最終更新:2026-10-09

$elemMatch (配列要素のマッチ)

$elemMatch は、少なくとも 1 つの配列要素が指定されたすべての条件を満たすドキュメントに一致します。`{ scores: { $elemMatch: { $gt: 80, $lt: 90 } } }` は、1 つのスコアが 80 超かつ 90 未満であることを要求します。$elemMatch を使わないと、複数条件の配列クエリは異なる要素にまたがって一致してしまいます。配列クエリの古典的な落とし穴です。

カテゴリ配列
MongoDB バージョン1.0+
例の言語mongosh(シェル)

📝 構文

{ <field>: { $elemMatch: { <condition1>, <condition2>, ... } } }

⚙️ パラメータ

フィールドマッチ対象の配列フィールド。
条件要素がすべて満たす必要があるクエリ条件。

戻り値:一致するドキュメントのカーソル

▶ 例

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

// $elemMatch: 80 から 90 の間のスコアが 1 つ
// 同じ要素が両方を満たす必要がある
db.students.find({ scores: { $elemMatch: { $gt: 80, $lt: 90 } } })

// 誤り: 異なる要素にまたがって一致してしまう
// db.students.find({ scores: { $gt: 80, $lt: 90 } })

出力:

// 1 つのスコアが 80 超かつ 90 未満の学生を返す

📌 注意事項

📚 関連チュートリアル

❓ よくある質問

Q$elemMatch と素の配列条件の違いは?
A素の { $gt: 80, $lt: 90 } は異なる要素にまたがって一致します。$elemMatch は 1 つの要素が両方を満たすことを強制します。
Q$elemMatch はネストしたドキュメントの配列に使えますか?
Aはい。ネストフィールドを参照します。例: { $elemMatch: { type: 'exam', score: { $gte: 90 } } }。
Q$elemMatch は 1 つのフィールドにしか適用できませんか?
Aはい。1 つの配列フィールドを対象にします。複数の配列フィールドには $elemMatch をそれぞれ書きます。
Web-Tutorial.com

Web-Tutorial 技術チーム

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

100%