$exists (フィールドの存在)
最終更新:2026-10-09
$exists (フィールドの存在)
$exists は、フィールドが存在するかどうかでドキュメントを絞り込みます。`{ $exists: true }` はフィールドが存在し null でないドキュメントに一致し、`{ $exists: false }` はフィールドが存在しないドキュメントに一致します。存在しないフィールドをスキップする $ne/$gt などと組み合わせて使う、欠落フィールド対策の基本ツールです。
| カテゴリ | 要素と評価 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ <field>: { $exists: <boolean> } }
⚙️ パラメータ
| フィールド | 存在をテストするドキュメントフィールド。 |
|---|---|
| boolean | true は存在するフィールド、false は欠落しているフィールドにマッチします。 |
戻り値:一致するドキュメントのカーソル
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $exists: メールアドレスを持つユーザー
// フィールドが存在し、null でないこと
db.users.find({ email: { $exists: true } })
// email フィールドのないユーザー
db.users.find({ email: { $exists: false } })
出力:
// 1 つ目は email フィールドを持つユーザー、2 つ目は持たないユーザーを返す
📌 注意事項
- $exists: true は値が null のフィールドには一致しない
- $ne/$gt/$nin のフィールド欠落時の挙動を補うために組み合わせる
- ネストしたフィールドにはドット記法を使う: { 'address.city': { $exists: true } }
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q$exists: true は null 値に一致しますか?
Aいいえ。フィールドが存在しても値が null なら $exists: true を満たしません。$type: 10 または $eq: null を使います。
Q$exists と $ne はどう組み合わせますか?
A{ $ne: value, $exists: true } は「フィールドが存在し、かつ値が異なる」を意味し、$ne が欠落フィールドをスキップするのを防ぎます。
Q配列フィールドの存在を確認するには?
A同じパターンです: { $exists: true }。空の配列も「存在する」とみなされます。