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.