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

MongoDB集約フレームワークの$matchステージで$or条件を使う方法

MongoDBの集約フレームワーク(Aggregation Framework)では、$matchステージ内で$or演算子を組み合わせることで、「いずれかの条件に一致するドキュメント」を抽出できます。本記事では、実際にサンプルコレクションを作成し、姓(StudentLastName)が「Smith」または「Miller」である学生データを取得する手順を解説します。

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

まず、insertOne()メソッドを使ってドキュメントを含むコレクションを作成します。以下のクエリを実行してください。

> db.aggregationFrameworkWithOrMatchDemo.insertOne({"StudentFirstName":"John",
    "StudentLastName":"Smith","StudentAge":23});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8ac3a96cea1f28b7aa080d")
}
> db.aggregationFrameworkWithOrMatchDemo.insertOne({"StudentFirstName":"Carol",
    "StudentLastName":"Tayor","StudentAge":24});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8ac3bc6cea1f28b7aa080e")
}
> db.aggregationFrameworkWithOrMatchDemo.insertOne({"StudentFirstName":"David",
    "StudentLastName":"Miller","StudentAge":21});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8ac3ce6cea1f28b7aa080f")
}
> db.aggregationFrameworkWithOrMatchDemo.insertOne({"StudentFirstName":"Bob",
    "StudentLastName":"Taylor","StudentAge":20});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8ac3e16cea1f28b7aa0810")
}
> db.aggregationFrameworkWithOrMatchDemo.insertOne({"StudentFirstName":"Robert",
    "StudentLastName":"Smith","StudentAge":20});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8ac3fb6cea1f28b7aa0811")
}
> db.aggregationFrameworkWithOrMatchDemo.insertOne({"StudentFirstName":"Mike",
    "StudentLastName":"Miller","StudentAge":27});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8ac4166cea1f28b7aa0812")
}

これで、6件の学生ドキュメントが登録されたコレクションが準備できました。

2. 登録したドキュメントの確認

find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。クエリは以下のとおりです。

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

実行結果は次のようになります。

{
    "_id" : ObjectId("5c8ac3a96cea1f28b7aa080d"),
    "StudentFirstName" : "John",
    "StudentLastName" : "Smith",
    "StudentAge" : 23
}
{
    "_id" : ObjectId("5c8ac3bc6cea1f28b7aa080e"),
    "StudentFirstName" : "Carol",
    "StudentLastName" : "Tayor",
    "StudentAge" : 24
}
{
    "_id" : ObjectId("5c8ac3ce6cea1f28b7aa080f"),
    "StudentFirstName" : "David",
    "StudentLastName" : "Miller",
    "StudentAge" : 21
}
{
    "_id" : ObjectId("5c8ac3e16cea1f28b7aa0810"),
    "StudentFirstName" : "Bob",
    "StudentLastName" : "Taylor",
    "StudentAge" : 20
}
{
    "_id" : ObjectId("5c8ac3fb6cea1f28b7aa0811"),
    "StudentFirstName" : "Robert",
    "StudentLastName" : "Smith",
    "StudentAge" : 20
}
{
    "_id" : ObjectId("5c8ac4166cea1f28b7aa0812"),
    "StudentFirstName" : "Mike",
    "StudentLastName" : "Miller",
    "StudentAge" : 27
}

3. 集約フレームワークで$matchと$orを組み合わせる

それでは、集約フレームワークのaggregate()メソッド内で$matchステージと$or演算子を組み合わせたクエリを実行します。ここでは、姓(StudentLastName)が「Smith」または「Miller」であるドキュメントを抽出対象としています。

> db.aggregationFrameworkWithOrMatchDemo.aggregate({
... $match: { $or: [{ StudentLastName: 'Smith' }, { StudentLastName: 'Miller' }] }}).pretty();

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

{
    "_id" : ObjectId("5c8ac3a96cea1f28b7aa080d"),
    "StudentFirstName" : "John",
    "StudentLastName" : "Smith",
    "StudentAge" : 23
}
{
    "_id" : ObjectId("5c8ac3ce6cea1f28b7aa080f"),
    "StudentFirstName" : "David",
    "StudentLastName" : "Miller",
    "StudentAge" : 21
}
{
    "_id" : ObjectId("5c8ac3fb6cea1f28b7aa0811"),
    "StudentFirstName" : "Robert",
    "StudentLastName" : "Smith",
    "StudentAge" : 20
}
{
    "_id" : ObjectId("5c8ac4166cea1f28b7aa0812"),
    "StudentFirstName" : "Mike",
    "StudentLastName" : "Miller",
    "StudentAge" : 27
}

結果のポイント

出力を見ると、元の6件のうち、姓が「Smith」(John・Robert)または「Miller」(David・Mike)である4件のドキュメントのみが返されていることがわかります。このように、集約パイプラインの$matchステージ内で$or演算子を使用すれば、複数条件のいずれかに一致するドキュメントを柔軟にフィルタリングできます。なお、同じフィールドに対する等価条件のみの場合は、$in演算子を使ってより簡潔に記述することも可能です。

  1. MongoDBのAggregationで$matchと$andを使って複数の値を照合する方法

    MongoDBのAggregationで$matchと$andを使って複数の値を照合する方法 MongoDBで複数の条件の「すべて」に一致するドキュメントを抽出したい場合には、Aggregationパイプラインの$matchステージと$and演算子を組み合わせます。本記事では、ネストされたドキュメント構造を持つコレクションを例に、実際のコードを通して具体的な手順を解説します。 1. サンプルコレクションの作成 まず、insertOne()メソッドを使って、ネストした構造を持つドキュメントを1件挿入し、テスト用のコレクションを作成します。 > db.demo574.insertOne( .

  2. MongoDBの集約(Aggregation)と投影(Projection)の使い方を解説

    MongoDBの集約と投影とはMongoDBで特定のフィールドだけを抽出しながらデータを加工したい場合、aggregate()メソッドと$projectステージを組み合わせるのが効果的です。$projectは、パイプライン内で指定されたフィールドを持つドキュメントだけを次のステージへ渡す役割を果たします。この記事では、実際にコレクションを作成し、$match・$unwind・$sort・$group・$projectを組み合わせた集約パイプラインの具体的な使い方を解説します。サンプルコレクションの作成まず、insertOne()を使ってドキュメントを含むコレクションを作成します。> db