Felder hinzufügen

Beschreibung

Fügen Sie den Dokumenten, die in der vorherigen Phase erstellt wurden, neue Felder hinzu.

Die generierten Dokumente enthalten alle Felder aus der vorherigen Phase sowie alle neu hinzugefügten Felder. Dabei werden alle Felder mit demselben Namen aus dem vorherigen Dokument überschrieben. In der Phase add_fields(...) können verschachtelte Felder aktualisiert werden, indem ein verschachtelter Feldname als Alias angegeben wird.

Beispiele

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

Verhalten

Sich überschneidende Felder

Wenn Sie einem Ausdruck einen Alias zuweisen, der bereits in den Dokumenten aus der vorherigen Phase vorhanden ist, wird das vorherige Feld in der Phase add_fields(...) überschrieben. Damit lassen sich mehrere Ausdrücke für dasselbe Feld verketten, z. B.:

Node.js

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

Verschachtelte Felder

Verschachtelte Felder (z.B. mit der Syntax .) können in dieser Phase aktualisiert werden. So ist es möglich, ein Feld „in-place“ zu aktualisieren, wie in folgendem Beispiel:

Node.js

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

Wenn Sie einem verschachtelten Feld einen Ausdruck zuweisen, werden alle fehlenden übergeordneten Felder implizit erstellt.