MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBで値が配列に含まれるかどうかを確認する方法($in演算子の使い方)

MongoDBで値が配列に含まれているかどうかを確認するには?

配列型のフィールドの中に、特定の値が存在するかどうかを調べたい場合には、$in 演算子を使用します。まずは、実際の動きを確認できるよう、サンプルとなるコレクションを作成しましょう。

ステップ1:コレクションにドキュメントを挿入する

> db.testInArray.insertOne({"ListOfNumbers":[10,56,78,90,32]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e04d42df5e889d7a519950d")
}
> db.testInArray.insertOne({"ListOfNumbers":[56,78,91,100]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e04d588f5e889d7a519950e")
}

ここでは、testInArray という名前のコレクションに2つのドキュメントを挿入しました。それぞれのドキュメントには、数値のリストを格納するための ListOfNumbers という配列フィールドが含まれています。

ステップ2:登録されたドキュメントを確認する

find() メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。

> db.testInArray.find().pretty();

このクエリを実行すると、次のような出力が得られます。

{
    "_id" : ObjectId("5e04d42df5e889d7a519950d"),
    "ListOfNumbers" : [
        10,
        56,
        78,
        90,
        32
    ]
}
{
    "_id" : ObjectId("5e04d588f5e889d7a519950e"),
    "ListOfNumbers" : [
        56,
        78,
        91,
        100
    ]
}

ステップ3:$in で値が配列内にあるかテストする

それでは本題です。ある値が配列の中に含まれているかどうかを判定するクエリは、次のように記述します。

> db.testInArray.find({ ListOfNumbers:{ "$in" : [90]} });

このクエリは、「ListOfNumbers 配列の中に 90 が含まれているドキュメント」のみを返します。実行結果は以下の通りです。

{ "_id" : ObjectId("5e04d42df5e889d7a519950d"), "ListOfNumbers" : [ 10, 56, 78, 90, 32 ] }

最初のドキュメントには 90 が含まれていたためヒットし、2つ目のドキュメント([56, 78, 91, 100])は該当しないため結果から除外されました。

$in 演算子を使うときのポイント

  • 複数の候補値を指定できる: 例えば { "$in": [90, 100] } のように指定すれば、90 または 100 のどちらか一方でも配列に含まれていればマッチします。SQL の IN 句に近い感覚で使えます。
  • OR 条件として機能する: $in は「指定したいずれかの値に一致すればよい」という意味を持つため、複数条件での絞り込み検索に便利です。
  • 配列フィールドにもそのまま使える: 通常のフィールドだけでなく、配列型のフィールドに対しても同じ書式で要素の存在チェックができます。
  1. 【MongoDB】idがドキュメント内の配列フィールドの値と一致する場合に除外するクエリの書き方

    MongoDBでは、ドキュメントの id フィールドの値が、同一ドキュメント内の配列型フィールド(例: subjectid)に含まれている場合に、そのドキュメントを検索結果から除外したいケースがあります。このような条件を実現するには、 $expr 演算子と組み合わせて $not および $in を使用します。本記事では、サンプルコレクションの作成からクエリの実行、出力結果の確認までを順を追って解説します。 サンプルコレクションの作成 まずは、動作確認用のドキュメントを含むコレクションを作成します。ここでは、 id フィールドと、文字列の配列を持つ subjectid フィールドを備えた2件のド

  2. MongoDBで配列をクエリして特定の値を取得する方法

    配列から特定の値を取得するには、aggregate()メソッドと$projectステージを組み合わせて使用します。まずは、ドキュメントを含むコレクションを作成してみましょう。 > db.demo761.insertOne( ...    { ...        "details": [ ...            { ...                "