文档菜单
文档首页
/
MongoDB 手册
/ / /

$match(聚合)

本页内容

  • 定义
  • 兼容性
  • 语法
  • 行为
  • 管道优化
  • 查询谓词中的表达式
  • 0,空值,False或缺失值
  • 限制
  • 使用Atlas Search通过Atlas在Atlas上筛选数据
  • 示例
  • 相等匹配
  • 执行计数
  • 更多信息
$match

根据指定的查询谓词筛选文档。匹配的文档传递到下一个管道阶段。

您可以使用 $match 在以下环境中部署

  • MongoDB Atlas:云中MongoDB部署的完全托管服务

{ $match: { <query predicate> } }

$match 查询谓词的语法与 find() 命令的查询参数 中使用的语法相同。

要在查询谓词中包含 表达式,请使用 $expr 操作符。

如果满足以下条件之一,$match 阶段将过滤掉管道结果中的一个文档:

  • $match 查询谓词在该文档上返回一个 0nullfalse 值。

  • $match 查询谓词使用该文档中缺失的字段。

  • $match 阶段中不能使用 $where

  • $match 阶段中不能使用 $near$nearSphere。作为替代,您可以选择:

  • 要在 $match 阶段中使用 $text,则 $match 阶段必须是管道的第一个阶段。

    视图 不支持 $text

    注意

    $text 为自托管(非 Atlas)部署提供文本查询功能。对于托管在 MongoDB Atlas 上的数据,MongoDB 提供了一个改进的全文查询解决方案,即 Atlas Search

对于存储在 MongoDB Atlas 的数据,您可以使用 Atlas Search 复合 操作符 filter 选项来在执行 $search 查询时匹配或过滤文档。在 $search 后运行 $match 比使用复合操作符 filter 选项的 复合 操作符 filter 选项运行 $search 的性能低。

有关 filter 选项的更多信息,请参阅 Atlas 文档中的 复合

以下示例使用一个名为 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 选择了作者字段等于 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 选择了分数大于 70 且小于 90 或观看次数大于或等于 1000 的文档。然后这些文档被传递到 $group 以执行计数。聚合返回以下结果

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

请参考以下页面获取更多关于聚合的信息和使用案例。

返回

$lookup