AggregateCommand.mergeObjects(value: Expression<document>): Object

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

聚合操作符。将多个文档合并为单个文档。

参数

value: Expression<document>

Document 表达式

返回值

Object

API 说明

使用形式如下: 在 group() 中使用时:

  1. mergeObjects(<document>)

在其它表达式中使用时:

  1. mergeObjects([<document1>, <document2>, ...])

示例代码

搭配 group() 使用

假设集合 sales 存在以下文档:

  1. { "_id": 1, "year": 2018, "name": "A", "volume": { "2018Q1": 500, "2018Q2": 500 } }
  2. { "_id": 2, "year": 2017, "name": "A", "volume": { "2017Q1": 400, "2017Q2": 300, "2017Q3": 0, "2017Q4": 0 } }
  3. { "_id": 3, "year": 2018, "name": "B", "volume": { "2018Q1": 100 } }
  4. { "_id": 4, "year": 2017, "name": "B", "volume": { "2017Q3": 100, "2017Q4": 250 } }

下面的代码使用 mergeObjects(),将用相同 name 的文档合并:

  1. const $ = db.command.aggregate
  2. db.collection('sales').aggregate()
  3. .group({
  4. _id: '$name',
  5. mergedVolume: $.mergeObjects('$volume')
  6. })
  7. .end()

输出如下:

  1. { "_id": "A", "mergedVolume": { "2017Q1": 400, "2017Q2": 300, "2017Q3": 0, "2017Q4": 0, "2018Q1": 500, "2018Q2": 500 } }
  2. { "_id": "B", "mergedVolume": { "2017Q3": 100, "2017Q4": 250, "2018Q1": 100 } }

一般用法

假设集合 test 存在以下文档:

  1. { "_id": 1, "foo": { "a": 1 }, "bar": { "b": 2 } }
  2. { "_id": 2, "foo": { "c": 1 }, "bar": { "d": 2 } }
  3. { "_id": 3, "foo": { "e": 1 }, "bar": { "f": 2 } }

下面的代码使用 mergeObjects(),将文档中的 foobar 字段合并为 foobar

  1. const $ = db.command.aggregate
  2. db.collection('sales').aggregate()
  3. .project({
  4. foobar: $.mergeObjects(['$foo', '$bar'])
  5. })
  6. .end()

输出结果如下:

  1. { "_id": 1, "foobar": { "a": 1, "b": 2 } }
  2. { "_id": 2, "foobar": { "c": 1, "d": 2 } }
  3. { "_id": 3, "foobar": { "e": 1, "f": 2 } }