添加字段

说明

向上一阶段生成的文档添加新字段。

生成的文档将包含来自上一阶段的所有字段以及所有新添加的字段,同时会覆盖文档中原有的同名字段。

语法

Node.js

const results = await db.pipeline()
  .collection("/users")
  .addFields(field('first_name').concat(' ', field('last_name')).as('full_name'))
  .execute();

行为

重叠字段

如果为表达式分配的别名与上一阶段文档中已有的字段同名,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();

添加新的顶级字段 address.city,而不是将表达式的结果合并回 address 下的嵌套映射中。

更多示例

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()
)