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.