Aggregate.match(object: Object): Aggregate

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合阶段。根据条件过滤文档,并且把符合条件的文档传递给下一个流水线阶段。

参数

object: Object

返回值

Aggregate

API 说明

match 的形式如下:

  1. match(<查询条件>)

查询条件与普通查询一致,可以用普通查询操作符,注意 match 阶段和其他聚合阶段不同,不可使用聚合操作符,只能使用查询操作符。

  1. // 直接使用字符串
  2. match({
  3. name: 'Tony Stark'
  4. })
  5. // 使用操作符
  6. const _ = db.command
  7. match({
  8. age: _.gt(18)
  9. })

match 内使用查询操作符从小程序基础库 2.8.3、云函数 SDK 1.3.0 开始支持。

示例

假设集合 articles 有如下记录:

  1. { "_id" : "1", "author" : "stark", "score" : 80 }
  2. { "_id" : "2", "author" : "stark", "score" : 85 }
  3. { "_id" : "3", "author" : "bob", "score" : 60 }
  4. { "_id" : "4", "author" : "li", "score" : 55 }
  5. { "_id" : "5", "author" : "jimmy", "score" : 60 }
  6. { "_id" : "6", "author" : "li", "score" : 94 }
  7. { "_id" : "7", "author" : "justan", "score" : 95 }

匹配

下面是一个直接匹配的例子:

  1. db.collection('articles')
  2. .aggregate()
  3. .match({
  4. author: 'stark'
  5. })
  6. .end()

这里的代码尝试找到所有 author 字段是 stark 的文章,那么匹配如下:

  1. { "_id" : "1", "author" : "stark", "score" : 80 }
  2. { "_id" : "2", "author" : "stark", "score" : 85 }

计数

match 过滤出文档后,还可以与其他流水线阶段配合使用。

比如下面这个例子,我们使用 group 进行搭配,计算 score 字段大于 80 的文档数量:

  1. const _ = db.command
  2. const $ = _.aggregate
  3. db.collection('articles')
  4. .aggregate()
  5. .match({
  6. score: _.gt(80)
  7. })
  8. .group({
  9. _id: null,
  10. count: $.sum(1)
  11. })
  12. .end()

返回值如下:

  1. { "_id" : null, "count" : 3 }