跳到主要内容

Aggregate.match

1. 接口描述#

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

声明: match({ <字段名>: <表达式> })

2. 输入参数#

参数类型必填说明
keyexpressionkey 为任意自定义字段名,其值表达式可以直接使用 numberstring 这样的原生类型,也可以使用聚合搜索操作符:

3. 返回结果#

参数类型必填说明
-Aggregate聚合对象

4. 示例代码#

假设集合 articles 有如下记录:

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

匹配#

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

const tcb = require('@cloudbase/node-sdk')const app = tcb.init({  env: 'xxx'})
const db = app.database()const $ = db.command.aggregateconst _ = db.command
exports.main = async (event, context) => {  const res = await db    .collection('articles')    .aggregate()    .match({      author: 'stark'    })    .end()  console.log(res.data)}

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

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

计数#

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

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

const tcb = require('@cloudbase/node-sdk')const app = tcb.init({  env: 'xxx'})
const db = app.database()const { gt, sum } = db.command.aggregate
exports.main = async (event, context) => {  const res = await db    .collection('articles')    .aggregate()    .match({      score: gt(80)    })    .group({      _id: null,      count: sum(1)    })    .end()  console.log(res.data)}

返回值如下:

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