SDK數(shù)據(jù)庫 Aggregate·指定根節(jié)點(diǎn)

2022-05-12 16:48 更新

Aggregate.replaceRoot(object:Object): Aggregate

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合階段。指定一個(gè)已有字段作為輸出的根節(jié)點(diǎn),也可以指定一個(gè)計(jì)算出的新字段作為根節(jié)點(diǎn)。

參數(shù)

object: Object

返回值

Aggregate

API 說明

replaceRoot 使用形式如下:

replaceRoot({
    newRoot: <表達(dá)式>
})

表達(dá)式格式如下:

格式說明
<字段名>指定一個(gè)已有字段作為輸出的根節(jié)點(diǎn)(如果字段不存在則報(bào)錯(cuò)
<對象>計(jì)算一個(gè)新字段,并且把這個(gè)新字段作為根節(jié)點(diǎn)

示例

使用已有字段作為根節(jié)點(diǎn)

假設(shè)我們有一個(gè) schools 集合,內(nèi)容如下:

{
  "_id": 1,
  "name": "SFLS",
  "teachers": {
    "chinese": 22,
    "math": 18,
    "english": 21,
    "other": 123
  }
}

下面的代碼使用 replaceRoot,把 teachers 字段作為根節(jié)點(diǎn)輸出:

db.collection('schools')
  .aggregate()
  .replaceRoot({
    newRoot: '$teachers'
  })
  .end()

輸出如下:

{
  "chinese": 22,
  "math": 18,
  "english": 21,
  "other": 123
}

使用計(jì)算出的新字段作為根節(jié)點(diǎn)

假設(shè)我們有一個(gè) roles 集合,內(nèi)容如下:

{ "_id": 1, "first_name": "四郎", "last_name": "黃" }
{ "_id": 2, "first_name": "邦德", "last_name": "馬" }
{ "_id": 3, "first_name": "牧之", "last_name": "張" }

下面的代碼使用 replaceRoot,把 first_name 和 last_name 拼在一起:

const { concat } = db.command.aggregate
db.collection('roles')
  .aggregate()
  .replaceRoot({
    newRoot: {
      full_name: concat(['$last_name', '$first_name'])
    }
  })
  .end()

輸出如下:

{ "full_name": "黃四郎" }
{ "full_name": "馬邦德" }
{ "full_name": "張牧之" }


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號