フィールドを追加(変換ステージ)

説明

前のステージで生成されたドキュメントに新しいフィールドを追加します。

生成されたドキュメントには、前のステージのすべてのフィールドと、新しく追加されたすべてのフィールドが含まれます。前のドキュメントと同じ名前のフィールドは上書きされます。add_fields(...) ステージでは、ネストされたフィールド名をエイリアスとして指定することで、ネストされたフィールドを更新できます。

例

ウェブ

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
Android
val result = db.pipeline()
    .collection("books")
    .select(Expression.add(field("soldBooks"), field("unsoldBooks")).alias("totalBooks"))
    .execute()
Java
Android
      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();
Go
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Add(firestore.FieldOf("soldBooks"), firestore.FieldOf("unsoldBooks")).As("totalBooks"),
	)).
	Execute(ctx)

動作

重複するフィールド

前のステージのドキュメントにすでに存在するエイリアスを式に割り当てると、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();

式をネストされたフィールドに割り当てると、欠落している親フィールドも暗黙的に作成されます。