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

MongoDBで配列内のフィールドを比較してドキュメントをクエリする方法


配列内のフィールドを比較してドキュメントを検索するには

MongoDBで配列の中にあるフィールドの値を比較条件として使いたい場合は、比較演算子の$gt(〜より大きい)と$lt(〜より小さい)を活用します。ドット記法(例:Details.Score)と組み合わせることで、配列の各要素が持つフィールドに対して柔軟に範囲条件を指定できます。

1. サンプルコレクションの作成

まずはinsertOne()メソッドを使って、テスト用のドキュメントをコレクションに挿入してみましょう。

> db.demo147.insertOne({"Details":[{"Score":45},{"Score":46}]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e32fa21fdf09dd6d08539be")
}
> db.demo147.insertOne({"Details":[{"Score":65},{"Score":86}]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e32fa40fdf09dd6d08539bf")
}

2. 登録内容の確認

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

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

上記のコマンドを実行すると、次のような出力が得られます。

{
    "_id" : ObjectId("5e32fa21fdf09dd6d08539be"),
    "Details" : [
        {
            "Score" : 45
        },
        {
            "Score" : 46
        }
    ]
}
{
    "_id" : ObjectId("5e32fa40fdf09dd6d08539bf"),
    "Details" : [
        {
            "Score" : 65
        },
        {
            "Score" : 86
        }
    ]
}

3. 配列内のScoreフィールドを比較するクエリ

ここからが本題です。次のクエリでは、Scoreが45より大きく、かつ50未満という条件でドキュメントを検索しています。

> db.demo147.find({ 'Details.Score': { $gt: 45, $lt: 50 }});

実行結果は次のとおりです。

{ "_id" : ObjectId("5e32fa21fdf09dd6d08539be"), "Details" : [ { "Score" : 45 }, { "Score" : 46 } ] }

条件に一致したのは1件目のドキュメントだけです。これは、配列内のScoreの値「46」が「45より大きい」「50未満」という両方の条件を満たしているためです。一方、2件目のドキュメントのScore(65と86)はどちらも50以上のため、条件から除外されました。

補足:$elemMatch演算子について

ドット記法で複数の条件を指定した場合、各条件を満たす要素が配列内にそれぞれ存在すればよく、必ずしも同じ1つの要素がすべての条件を満たす必要はありません。「単一の配列要素がすべての条件を満たすこと」を厳密に要求したい場合は、$elemMatch演算子を使うと意図がより明確になります。

> db.demo147.find({ Details: { $elemMatch: { Score: { $gt: 45, $lt: 50 } } }});

  1. MongoDBでドキュメント内の配列から特定の値を削除する方法($pull演算子の使い方)

    MongoDBで配列から値を削除したい場合は、$pull 演算子を使用します。$pull は、既存の配列から指定した条件に一致する値(または複数の値)のすべてのインスタンスを取り除くための更新演算子です。1. サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo535.insertOne( ... { ... studentId : 101, ... studentName : Chris, ... ListOfMailIds : [ ... Chris@gmail.com, ... Chr

  2. MongoDBでドキュメントのフィールドにアクセスする方法|find()とプロジェクションの使い方

    MongoDBでドキュメント内のフィールドにアクセスするには、find()メソッドを使用します。この記事では、実際にコレクションを作成し、ドキュメントを挿入したうえで、特定のフィールドだけを取得する方法をサンプルコード付きで解説します。 コレクションの作成とドキュメントの挿入 まず、サンプル用のコレクション「demo565」を作成し、3件のドキュメントを挿入します。insertOne()メソッドを使って、1件ずつ登録していきましょう。 > db.demo565.insertOne( ... { ... id:101, ... Name:David, ... Countr