입력란 추가

설명

이전 단계에서 생성된 문서에 새 필드를 추가합니다.

생성된 문서에는 이전 단계의 모든 필드와 새로 추가된 모든 필드가 포함되며, 이전 문서와 이름이 동일한 필드는 덮어쓰여집니다.

구문

Node.js

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

클라이언트 예시

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()
)
자바
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();

표현식의 결과를 address 아래의 중첩된 맵에 다시 병합하는 대신 새로운 최상위 필드 address.city를 추가합니다.