# [AggregateCommand](AggregateCommand).addToSet(value: [Expression](/miniprogram/dev/wxcloudservice/wxcloud/reference-sdk-api/database/aggregate/Expression)): Object

> 支持端：[小程序 2.7.4](/miniprogram/dev/framework/client-lib/version.md), [云函数 0.8.1](/miniprogram/dev/wxcloudservice/wxcloud/reference/changelog-server-sdk), [Web](/miniprogram/dev/wxcloudservice/wxcloud/reference/changelog-web-sdk)

聚合操作符。聚合运算符。向数组中添加值，如果数组中已存在该值，不执行任何操作。它只能在 `group stage` 中使用。

## 参数

### value: [Expression](/miniprogram/dev/wxcloudservice/wxcloud/reference-sdk-api/database/aggregate/Expression)

表达式

## 返回值

### Object

## API 说明

`addToSet` 语法如下：

```javascript
db.command.aggregate.addToSet()
```

表达式是形如 `$ + 指定字段` 的字符串。如果指定字段的值是数组，那么整个数组会被当作一个元素。

## 示例代码

假设集合 `passages` 的记录如下：

```json
{ "category": "web", "tags": [ "JavaScript", "CSS" ], "title": "title1" }
{ "category": "System", "tags": [ "C++", "C" ], "title": "title2" }
```

#### 非数组字段

每条记录的 `category` 对应值的类型是非数组，利用 `addToSet` 统计所有分类：

```javascript
const $ = db.command.aggregate
db
  .collection('passages')
  .aggregate()
  .group({
    _id: null,
    categories: $.addToSet('$category')
  })
  .end()
```

返回的结果如下：

```json
{ "_id": null, "categories": [ "System", "web" ] }
```

#### 数组字段

每条记录的 `tags` 对应值的类型是数组，数组不会被自动展开：

```javascript
const $ = db.command.aggregate
db
  .collection('passages')
  .aggregate()
  .group({
    _id: null,
    tagsList: $.addToSet('$tags')
  })
  .end()
```

返回的结果如下：

```json
{ "_id": null, "tagsList": [ [ "C++", "C" ], [ "JavaScript", "CSS" ] ] }
```
