Felder hinzufügen

Beschreibung

Fügt 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. Alle Felder mit demselben Namen aus dem vorherigen Dokument werden ü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();
Go
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Add(firestore.FieldOf("soldBooks"), firestore.FieldOf("unsoldBooks")).As("totalBooks"),
	)).
	Execute(ctx)

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 add_fields(...)-Phase überschrieben. Damit können mehrere Ausdrücke über denselben Feldnamen verkettet werden, 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. Felder mit der Syntax .) können in dieser Phase aktualisiert werden. So kann ein Feld „direkt“ aktualisiert werden, z. B. in:

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 auch alle fehlenden übergeordneten Felder implizit erstellt.