Skip to main content

Aggregate.match

1. Interface Description

Function: Aggregation stage. Filters documents based on conditions and passes those that meet the conditions to the next pipeline stage.

Syntax: match({ <field name>: <expression> })

2. Input Parameters

ParameterTypeRequiredDescription
keyexpressionRequiredkey is any custom field name. Its value expression can directly use native types such as number and string, or use aggregation search operators.

3. Response

ParameterTypeRequiredDescription
-AggregateYesAggregation object

4. Sample Code

Suppose the collection articles contains the following records:

{ "_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 }

Match

Below is a direct match example:

const tcb = require("@cloudbase/node-sdk");
const app = tcb.init({
env: "xxx",
});

const db = app.database();
const $ = db.command.aggregate;
const _ = db.command;

exports.main = async (event, context) => {
const res = await db
.collection("articles")
.aggregate()
.match({
author: "stark",
})
.end();
console.log(res.data);
};

This code attempts to find all articles where the author field is stark. The matches are as follows:

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

Count

After match` filters out documents, it can also be used in conjunction with other pipeline stages.

For example, in the following example, we use group in conjunction to calculate the number of documents where the score field is greater than 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);
};

The return value is as follows:

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