AggregateCommand.addToSet(value: Expression): Object

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

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

参数

value: Expression

表达式

返回值

Object

API 说明

addToSet 语法如下:

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

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

示例代码

假设集合 passages 的记录如下:

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

非数组字段

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

  1. const $ = db.command.aggregate
  2. db
  3. .collection('passages')
  4. .aggregate()
  5. .group({
  6. _id: null,
  7. categories: $.addToSet('$category')
  8. })
  9. .end()

返回的结果如下:

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

数组字段

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

  1. const $ = db.command.aggregate
  2. db
  3. .collection('passages')
  4. .aggregate()
  5. .group({
  6. _id: null,
  7. tagsList: $.addToSet('$tags')
  8. })
  9. .end()

返回的结果如下:

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