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 Atlas でホストされているデータに対して、MongoDB は改良された全文クエリ ソリューションである Atlas Search を提供します。

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

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

例では、次のドキュメントを含む articles という名前のコレクションを使用します。

{ "_id" : ObjectId("512bc95fe835e68f199c8686"), "author" : "dave", "score" : 80, "views" : 100 }
{ "_id" : ObjectId("512bc962e835e68f199c8687"), "author" : "dave", "score" : 85, "views" : 521 }
{ "_id" : ObjectId("55f5a192d4bede9ac365b257"), "author" : "ahn", "score" : 60, "views" : 1000 }
{ "_id" : ObjectId("55f5a192d4bede9ac365b258"), "author" : "li", "score" : 55, "views" : 5000 }
{ "_id" : ObjectId("55f5a1d3d4bede9ac365b259"), "author" : "annT", "score" : 60, "views" : 50 }
{ "_id" : ObjectId("55f5a1d3d4bede9ac365b25a"), "author" : "li", "score" : 94, "views" : 999 }
{ "_id" : ObjectId("55f5a1d3d4bede9ac365b25b"), "author" : "ty", "score" : 95, "views" : 1000 }

次の操作では、 $matchを使用して等価一致を実行します。

db.articles.aggregate(
[ { $match : { author : "dave" } } ]
);

$matchは、 authorフィールドがdaveと等しいドキュメントを選択し、集計は次の結果を返します。

{ "_id" : ObjectId("512bc95fe835e68f199c8686"), "author" : "dave", "score" : 80, "views" : 100 }
{ "_id" : ObjectId("512bc962e835e68f199c8687"), "author" : "dave", "score" : 85, "views" : 521 }

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

db.articles.aggregate( [
{ $match: { $or: [ { score: { $gt: 70, $lt: 90 } }, { views: { $gte: 1000 } } ] } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );

集計パイプラインで、$match は、score70 より大きく 90 より小さいか、views1000以上のドキュメントを選択します。これらのドキュメントは、カウントを実行するために$groupにつなげられます。集計により次の結果が返されます。

{ "_id" : null, "count" : 5 }

このページの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

前のクラスのプロパティはパスカル ケースで名前付けされていますが、 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");

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

戻る

$lookup

ルール バッジを取得する

「データ変換の基礎」を無料でマスターします。

詳細

項目一覧