Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$match(集計ステージ)

$match

指定されたクエリ述語に基づいてドキュメントをフィルタリングします。 一致したドキュメントは、次のパイプライン ステージに渡されます。

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

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

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

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

{ $match: { <query predicate> } }

クエリ述語の構文は、$match コマンドの クエリ find()引数で使用される構文と同じです。

クエリ述語にを含めるには、 $expr演算子を使用します。

次のいずれかの条件に当てはまる場合、$match ステージはパイプラインの結果からドキュメントをフィルタリングで除外します。

  • $match クエリ述語は、そのドキュメントの 0null 、または false の値を返します。

  • $matchクエリ述語は、そのドキュメントには欠落しているフィールドを使用します 。

  • $matchステージでは$whereは使用できません。

  • $matchステージでは$nearまたは$nearSphereは使用できません。 あるいは、次のいずれかを実行できます。

  • $text$matchステージで を使用するには、$match ステージがパイプラインの最初のステージである必要があります。

    ビュー$textをサポートしていません。

    注意

    $text は、自己管理型(Atlas 以外)配置に対するテキスト クエリ機能を提供します。MongoDBでホストされているデータに対して、 MongoDB は改良された全文クエリ ソリューションであるMongoDB Search も提供します。

MongoDB Atlasに保存されているデータでは、 クエリを実行中中にMongoDB Search filter$search複合演算子 演算子 オプションを使用して、ドキュメントを一致またはフィルタリングできます。$match$searchの後に$search を実行する方法は、 複合演算子 演算子 オプションを使用してfilter を実行中方法よりパフォーマンスが低くなります。

filter オプションの詳細については、Atlas ドキュメントの「複合演算子」を参照してください。

このページの例では、sample_mflixサンプルデータセットのデータを使用します。このデータセットを自己管理型MongoDB配置にロードする方法の詳細については、サンプルデータセットをロードする を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。

次の操作では、$match を使用して ratedフィールドで等価一致を実行します。runtime フィルターは、結果を小さく表現されたセットに制限します。

db.movies.aggregate(
[ { $match : { rated : "TV-PG", runtime : { $gt: 1000 } } } ]
)

The $match selects the documents where the ratedフィールドが"TV-PG" に等しく、かつ runtime1000 より大きいdocumentを選択します。

次の例では、 $matchパイプライン演算子を使用して処理するドキュメントを選択し、その結果を$groupパイプライン演算子にパイプしてドキュメントの数を計算します。

db.movies.aggregate( [
{ $match: { $or: [
{ runtime: { $gt: 1000 } },
{ year: { $lt: 1910 } }
] } },
{ $group: { _id: null, count: { $sum: 1 } } }
] )
[ { _id: null, count: 6 } ]

集計パイプラインで、$match は、runtime1000 より大きいか、year1910 より前のdocumentを選択します。これらのドキュメントは、カウントを実行するために $group に送信されます。

配列フィールド内の要素に基づいてdocumentをフィルタリングするには、$match ステージのクエリ述語で $elemMatch 演算子を使用します。

db.aggregate( [
{
$documents: [
{ student_id: 1, scores: [ 0.75, 0.65, 0.73 ] },
{ student_id: 2, scores: [ 0.9, 0.88, 0.98 ] },
{ student_id: 3, scores: [ 0.9, 0.84, 0.93 ] }
]
}, {
$match: {
scores: { $elemMatch: { $gte: 0.9 } }
}
}
] )
[
{ student_id: 2, scores: [ 0.9, 0.88, 0.98 ] },
{ student_id: 3, scores: [ 0.9, 0.84, 0.93 ] }
]

このページのC#の例では、Atlasサンプルデータセットsample_mflixデータベースを使用します。MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 MongoDB .NET/ C#ドライバーのドキュメントの「 開始 」を参照してください。

次の Movie クラスは、sample_mflix.movies コレクション内のドキュメントをモデル化します。

public class Movie
{
public ObjectId Id { get; set; }
public int Runtime { get; set; }
public string Title { get; set; }
public string Rated { get; set; }
public List<string> Genres { get; set; }
public string Plot { get; set; }
public ImdbData Imdb { get; set; }
public int Year { get; set; }
public int Index { get; set; }
public string[] Comments { get; set; }
[BsonElement("lastupdated")]
public DateTime LastUpdated { get; set; }
}

注意

パスカルケースの ConventionPack

このページのC# クラスはプロパティ名にパスカルケースを使用していますが、MongoDB コレクションのフィールド名はキャメルケースを使用しています。この違いを考慮するために、アプリケーションが起動する際に次のコードを使用してConventionPackを登録してください。

var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() };
ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);

MongoDB .NET/ C#ドライバーを使用して$match ステージを集計パイプラインに追加するには、 PipelineDefinitionオブジェクトで Match() メソッドを呼び出します。

次の例では、Titleフィールドが "The Shawshank Redemption" に等しいすべての Movie ドキュメントに一致するパイプラインステージを作成します。

var pipeline = new EmptyPipelineDefinition<Movie>()
.Match(m => m.Title == "The Shawshank Redemption");

このページのNode.js の例では、Atlasサンプルデータセットsample_mflixデータベースを使用します。無料のMongoDB Atlas cluster を作成し、サンプルデータセットをロードする方法については、 MongoDB Node.jsドライバーのドキュメントの開始を参照してください。

MongoDB Node.jsドライバーを使用して $match ステージを集計パイプラインに追加するには、パイプラインオブジェクトで $match 演算子を使用します。

次の例では、title フィールドが "The Shawshank Redemption" に等しいすべての movie ドキュメントに一致するパイプラインステージを作成します。次に、この例は集計パイプラインを実行します。

const pipeline = [
{
$match: {
title: "The Shawshank Redemption"
}
}
];
const cursor = collection.aggregate(pipeline);
return cursor;

集計に関する詳細情報とユースケースについては、完全な集計パイプラインチュートリアルを参照してください。

戻る

$lookup

ルール バッジを取得する

「データ変換の基礎」を無料でマスターしましょう!

詳細

項目一覧