# AggregateCommand.addToSet(value: Expression): Object

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

聚合操作符。聚合运算符。向数组中添加值,如果数组中已存在该值,不执行任何操作。它只能在 group stage 中使用。

# 参数

# value: Expression

表达式

# 返回值

# Object

# API 说明

addToSet 语法如下:

db.command.aggregate.addToSet(<表达式>)

表达式是形如 $ + 指定字段 的字符串。如果指定字段的值是数组,那么整个数组会被当作一个元素。

# 示例代码

假设集合 passages 的记录如下:

{ "category": "web", "tags": [ "JavaScript", "CSS" ], "title": "title1" }
{ "category": "System", "tags": [ "C++", "C" ], "title": "title2" }

# 非数组字段

每条记录的 category 对应值的类型是非数组,利用 addToSet 统计所有分类:

const $ = db.command.aggregate
db
  .collection('passages')
  .aggregate()
  .group({
    _id: null,
    categories: $.addToSet('$category')
  })
  .end()

返回的结果如下:

{ "_id": null, "categories": [ "System", "web" ] }

# 数组字段

每条记录的 tags 对应值的类型是数组,数组不会被自动展开:

const $ = db.command.aggregate
db
  .collection('passages')
  .aggregate()
  .group({
    _id: null,
    tagsList: $.addToSet('$tags')
  })
  .end()

返回的结果如下:

{ "_id": null, "tagsList": [ [ "C++", "C" ], [ "JavaScript", "CSS" ] ] }