MongoDB match

MongoDB match

MongoDB 中,aggregate 的 match 用于过滤文档,仅将符合指定条件的文档传递到下一个管道阶段。 $match 接受一个指定查询条件的文档。查询语法与读操作查询语法相同。

MongoDB match详解

语法

db_name.collection_name.aggregate([ { $match: { <query> } } ])

参数

名称 描述
db_name 数据库名
collection_name 表名
query 查询条件

说明

查询符合 query 的所有文档。

优化

match 用于对文档进行筛选,之后可以在得到的文档子集上做聚合,match 可以使用除了地理空间之外的所有常规查询操作符,在实际应用中尽可能将 $match 放在管道的前面位置。这样有两个好处:一是可以快速将不需要的文档过滤掉,以减少管道的工作量;二是如果再投射和分组之前执行 $match,查询可以使用索引。

技术细节

  1. 不能在 $match 查询中使用 $ 作为聚合管道的一部分。
  2. 要在 $match 阶段使用 $text$match 阶段必须是管道的第一阶段。
  3. 视图不支持文本搜索。

案例

我们首先,使用 mongo 命令,连接上数据库,具体命令如下:

mongo

如下图所示:

51_mongodb match.png

现在,我们使用 use 命令,切换到 haicoder 数据库,具体命令如下:

use haicoder

现在,我们使用 insert 插入四条记录,具体命令如下:

db.haicoder.insert([ {id:1, "url" : "haicoder.net/c", "score" : 100 }, {id:1, "url" : "haicoder.net/cpp", "score" : 90 }, {id:2, "url" : "haicoder.net/golang", "score" : 80 }, {id:2, "url" : "haicoder.net/java", "score" : 60 } ]);

执行完毕后,此时,如下图所示:

52_mongodb match.png

我们看到,此时提示我们成功插入了多条记录,现在,我们使用 aggregate match,查询符合要求的文档,具体命令如下:

db.haicoder.aggregate([ { '$match': {id:{$gt:1}} } ]);

执行完毕后,此时,如下图所示:

53_mongodb match.png

现在,我们再次查询,具体命令如下:

db.haicoder.aggregate([ { '$match': {'id': {$gt:1}, 'score':{$gt:70}} } ]);

执行完毕后,此时,如下图所示:

54_mongodb match.png

我们看到,此时我们求出了 id 大于 1 的记录的记录。

MongoDB match总结

在 MongoDB 中,aggregate 的 match 用于过滤文档,仅将符合指定条件的文档传递到下一个管道阶段。 $match 接受一个指定查询条件的文档。查询语法与读操作查询语法相同。