$match (aggregation)

On this page本页内容

Definition定义

$match

Filters the documents to pass only the documents that match the specified condition(s) to the next pipeline stage.筛选文档以仅将与指定条件匹配的文档传递到下一个管道阶段。

The $match stage has the following prototype form:$match阶段具有以下原型形式:

{ $match: { <query> } }

$match takes a document that specifies the query conditions. 获取指定查询条件的文档。The query syntax is identical to the read operation query syntax; i.e. $match does not accept raw aggregation expressions. 查询语法与读取操作查询语法相同;即,$match不接受原始聚合表达式Instead, use a $expr query expression to include aggregation expression in $match.相反,使用$expr查询表达式将聚合表达式包含在$match中。

Behavior行为

Pipeline Optimization管道优化

  • Place the $match as early in the aggregation pipeline as possible. 尽可能早地在聚合管道中放置$matchBecause $match limits the total number of documents in the aggregation pipeline, earlier $match operations minimize the amount of processing down the pipe.因为$match限制了聚合管道中的文档总数,所以早期的$match操作将管道中的处理量最小化。
  • If you place a $match at the very beginning of a pipeline, the query can take advantage of indexes like any other db.collection.find() or db.collection.findOne().如果将$match放在管道的最开始,查询可以像任何其他db.collection.find()db.collection.findOne()一样利用索引

Restrictions限制

Examples示例

The examples use a collection named articles with the following documents:示例使用了一个名为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 }

Equality Match相等匹配

The following operation uses $match to perform a simple equality match:以下操作使用$match执行简单的相等匹配:

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

The $match selects the documents where the author field equals dave, and the aggregation returns the following:$match选择author字段等于dave的文档,聚合返回以下内容:

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

Perform a Count计数

The following example selects documents to process using the $match pipeline operator and then pipes the results to the $group pipeline operator to compute a count of the documents:以下示例使用$match管道运算符选择要处理的文档,然后将结果管道传输到$group管道运算符,以计算文档的计数:

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

In the aggregation pipeline, $match selects the documents where either the score is greater than 70 and less than 90 or the views is greater than or equal to 1000. 在聚合管道中,$match选择score大于70且小于90views大于或等于1000的文档。These documents are then piped to the $group to perform a count. 然后,这些文档通过管道传输到$group以执行计数。The aggregation returns the following:聚合返回以下内容:

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

Additional Information附加信息

Refer to the following pages for more information and use cases on aggregation.有关聚合的更多信息和用例,请参阅以下页面。

Filter Data on Atlas Using Atlas Search使用图集搜索筛选图集上的数据

For your $search queries against data on your Atlas cluster, you can use the Atlas Searchcompound operator filter option to match or filter documents. 对于针对Atlas集群上的数据的$search查询,可以使用Atlas Search复合运算符筛选选项匹配或筛选文档。Running $match after $search is less performant than running $search with the compound operator filter option. $search之后运行$match比使用复合运算符filter选项运行$search性能差。To learn more about the filter option, see compound.要了解有关filter选项的更多信息,请参阅复合

Aggregation Tutorials聚合教程

←  $lookup (aggregation)$merge (aggregation) →