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

$exists

項目一覧

  • 定義
  • 互換性
  • 構文
  • Atlas Search を使用した Atlas 上のデータのクエリ
  • 存在し、かつ等しくない
  • Null Values
  • を使用してsparse index $exists{0 のパフォーマンスを向上させる
$exists

$exists演算子は、フィールド値がnullであるドキュメントを含む、指定されたフィールドを含む、または含まないドキュメントと一致させます。

注意

MongoDB $exists は SQL 演算子exists に対応するものではありませんexists SQLについては、「 $in演算子」を参照してください。

Atlas Search existsについては、Atlas ドキュメントのexists演算子を参照してください。

Tip

以下も参照してください。

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

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

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

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

$exists式を指定するには、次のプロトタイプを使用します。

{ field: { $exists: <boolean> } }

<boolean>が true の場合、 $existsは、フィールド値がnullであるドキュメントを含む、 フィールドを含むドキュメントと一致します。 <boolean>が false の場合、クエリは フィールドを 含んでいない ドキュメントのみを返します。 [ 1 ]

[1] クエリフィルター $type: 0$exists:false の同義語として使用できなくなりました。null または欠落しているフィールドをクエリするには、「null または欠落しているフィールドのクエリ」を参照してください。

MongoDB Atlas に保存されているデータには、$search クエリを実行中に Atlas Searchexists 演算子を使用できます。$search の後に $exists を実行するのは、$searchexists 演算子とともに実行する場合よりパフォーマンスが低くなります。

この演算子の Atlas Search バージョンの詳細については、Atlas ドキュメントのexists演算子を参照してください。

次の例で考えてみます。

db.inventory.find( { qty: { $exists: true, $nin: [ 5, 15 ] } } )

このクエリは、qty フィールドが存在し、かつその値が 5 または 15 と等しくない inventory コレクション内のすべてのドキュメントを選択します。

次の例では、以下のドキュメントを含む spices という名前のコレクションを使用します。

db.spices.insertMany( [
{ saffron: 5, cinnamon: 5, mustard: null },
{ saffron: 3, cinnamon: null, mustard: 8 },
{ saffron: null, cinnamon: 3, mustard: 9 },
{ saffron: 1, cinnamon: 2, mustard: 3 },
{ saffron: 2, mustard: 5 },
{ saffron: 3, cinnamon: 2 },
{ saffron: 4 },
{ cinnamon: 2, mustard: 4 },
{ cinnamon: 2 },
{ mustard: 6 }
] )

次のクエリでは、クエリ述語 saffron: { $exists: true } を指定します。

db.spices.find( { saffron: { $exists: true } } )

結果は、フィールド saffron を含むドキュメントで構成されます。これには、フィールド saffron に null 値が含まれるドキュメントも含まれます。

{ saffron: 5, cinnamon: 5, mustard: null }
{ saffron: 3, cinnamon: null, mustard: 8 }
{ saffron: null, cinnamon: 3, mustard: 9 }
{ saffron: 1, cinnamon: 2, mustard: 3 }
{ saffron: 2, mustard: 5 }
{ saffron: 3, cinnamon: 2 }
{ saffron: 4 }

次のクエリでは、クエリ述語 cinnamon: { $exists: false } を指定します。

db.spices.find( { cinnamon: { $exists: false } } )

結果は、フィールド cinnamon を含まないドキュメントで構成されます。

{ saffron: 2, mustard: 5 }
{ saffron: 4 }
{ mustard: 6 }

クエリフィルター $type: 0$exists:false の同義語として使用できなくなりました。null または欠落しているフィールドをクエリするには、「null または欠落しているフィールドのクエリ」を参照してください。

次のシナリオは最適ではありません。コレクションのすべてのドキュメントが検査されるためです。

  • クエリを使用してドキュメントを検索またはカウントする

  • field: { $exists: true }を使用し、かつ

  • field が 以外のsparse indexを持っているか、 または インデックスが ない 場合。

パフォーマンスを向上させるには、次のシナリオに示すように、fieldsparse indexを作成します。

  1. stockSales コレクションを作成します。

    db.stockSales.insertMany( [
    { _id: 0, symbol: "MDB", auditDate: new Date( "2021-05-18T16:12:23Z" ) },
    { _id: 1, symbol: "MDB", auditDate: new Date( "2021-04-21T11:34:45Z" ) },
    { _id: 2, symbol: "MSFT", auditDate: new Date( "2021-02-24T15:11:32Z" ) },
    { _id: 3, symbol: "MSFT", auditDate: null },
    { _id: 4, symbol: "MSFT", auditDate: new Date( "2021-07-13T18:32:54Z" ) },
    { _id: 5, symbol: "AAPL" }
    ] )

    次の _id を持つドキュメント。

    • 3auditDate 値が null。

    • 5auditDate 値がない。

  2. auditDate フィールドにスパース インデックスを作成します。

    db.getCollection( "stockSales" ).createIndex(
    { auditDate: 1 },
    { name: "auditDateSparseIndex", sparse: true }
    )
  3. 次の例では、auditDate フィールドに値(null を含む)があり、スパース インデックスを使用しているドキュメントをカウントします。

    db.stockSales.countDocuments( { auditDate: { $exists: true } } )

    この例では 5 が返されます。auditDate 値が欠落しているドキュメントはカウントされません。

Tip

field の値が null でないドキュメントだけが必要な場合は、次のようにします。

たとえば、 stockSales コレクションを使用する場合は次のようになります。

db.stockSales.countDocuments( { auditDate: { $ne: null } } )

この例では 4 を返します。auditDate 値が欠落しているドキュメントや auditDate 値が null のドキュメントはカウントされません。

Tip

以下も参照してください。

戻る

要素クエリ