新增欄位

說明

在上一階段產生的文件中新增欄位。

產生的文件會包含前一階段的所有欄位,以及所有新加入的欄位,並覆寫前一份文件中名稱相同的欄位。add_fields(...) 階段可讓您指定巢狀欄位名稱做為別名,藉此更新巢狀欄位。

範例

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("soldBooks").add(field("unsoldBooks")).as("totalBooks"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("soldBooks").add(Field("unsoldBooks")).as("totalBooks")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(Expression.add(field("soldBooks"), field("unsoldBooks")).alias("totalBooks"))
    .execute()

Java

      Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(Expression.add(field("soldBooks"), field("unsoldBooks")).alias("totalBooks"))
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("soldBooks").add(Field.of("unsoldBooks")).as_("totalBooks"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(add(field("soldBooks"), field("unsoldBooks")).as("totalBooks"))
        .execute()
        .get();

行為

重疊欄位

如果為運算式指派的別名已存在於前一階段的文件中,add_fields(...) 階段就會覆寫先前的欄位。這可用於在相同欄位名稱上串連多個運算式,例如:

Node.js

const results = await db.pipeline()
  .collection("/users")
  .addFields(field('age').abs().as('age'))
  .addFields(field('age').add(10).as('age'))
  .execute();

巢狀欄位

巢狀欄位 (例如具有 . 語法的欄位) 可在這個階段更新。這樣即可「就地」更新欄位,例如:

Node.js

const results = await db.pipeline()
  .collection("/users")
  .addFields(field('address.city').toLower().as('address.city'))
  .execute();

將運算式指派給巢狀欄位時,系統也會一併建立所有缺少的父項欄位。