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

MongoDBで配列の指定インデックス位置にあるtrue値をクエリする方法

ドット(.)記法を使った配列要素の検索

MongoDBでは、ドット(.)記法を使用することで、配列内の特定のインデックス位置に格納された値を簡単にクエリできます。まずは、サンプルドキュメントを含むコレクションを作成してみましょう。

> db.containsTrueValueDemo.insertOne({"IsMarried":[true,false,true,true,true,true,false,true,false,false,true]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd5039c2cba06f46efe9ef5")
}

登録済みドキュメントの確認

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

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

上記のクエリを実行すると、以下のような出力が得られます。

{
    "_id" : ObjectId("5cd5039c2cba06f46efe9ef5"),
    "IsMarried" : [
        true,
        false,
        true,
        true,
        true,
        true,
        false,
        true,
        false,
        false,
        true
    ]
}

特定のインデックス位置のtrue値をクエリする

配列の任意のインデックス位置(n番目)の値がtrueであるかどうかを確認するには、「フィールド名.インデックス番号」という形式でクエリを記述します。ここでは、インデックス2(0から数えて3番目の要素)を指定した例を見てみましょう。

> db.containsTrueValueDemo.find({'IsMarried.2' : true});

実行結果は以下の通りです。IsMarried配列のインデックス2の値がtrueであるため、該当ドキュメントがマッチしています。

{ "_id" : ObjectId("5cd5039c2cba06f46efe9ef5"), "IsMarried" : [ true, false, true, true, true, true, false, true, false, false, true ] }

$and演算子で複数のインデックス条件を組み合わせる

複数のインデックス位置の値を同時にチェックしたい場合には、$and演算子を使って条件を組み合わせることができます。以下は、インデックス0とインデックス2の両方がtrueであるドキュメントを検索する例です。

> db.containsTrueValueDemo.find({$and : [ {'IsMarried.0' : true}, {'IsMarried.2' : true} ] } );

実行結果:

{ "_id" : ObjectId("5cd5039c2cba06f46efe9ef5"), "IsMarried" : [ true, false, true, true, true, true, false, true, false, false, true ] }

まとめ

このように、ドット(.)記法を利用すれば配列の任意の位置にある値を直接参照でき、さらに$and演算子と組み合わせることで、複数のインデックスに対する複合条件での検索も柔軟に実現できます。ブール型の配列だけでなく、文字列や数値など他のデータ型でも同様の手法が使えるため、ぜひ活用してみてください。

  1. 【MongoDB】idがドキュメント内の配列フィールドの値と一致する場合に除外するクエリの書き方

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

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

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