Descrizione
Aggiungi nuovi campi ai documenti prodotti nella fase precedente.
I documenti generati conterranno tutti i campi della fase precedente, insieme a tutti i campi appena aggiunti, sovrascrivendo qualsiasi campo che condivida lo stesso nome del documento precedente. La fase add_fields(...) consente di aggiornare i campi nidificati specificando il nome di un campo nidificato come alias.
Esempi
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();
Comportamento
Campi sovrapposti
Se assegni a un'espressione un alias già presente nei documenti della fase precedente, la fase add_fields(...) sovrascriverà il campo precedente. Questa operazione può essere utilizzata per concatenare più espressioni sullo stesso nome di campo, ad esempio:
Node.js
const results = await db.pipeline()
.collection("/users")
.addFields(field('age').abs().as('age'))
.addFields(field('age').add(10).as('age'))
.execute();
Campi nidificati
I campi nidificati (ad es. quelli con sintassi . ) possono essere aggiornati nell'ambito di questa fase. In questo modo è possibile aggiornare un campo "in-place", ad esempio:
Node.js
const results = await db.pipeline()
.collection("/users")
.addFields(field('address.city').toLower().as('address.city'))
.execute();
Se assegni un'espressione a un campo nidificato, verranno creati implicitamente anche tutti i campi genitori mancanti.