Groupe de collections

Description

Renvoie tous les documents de n'importe quelle collection avec l'ID de collection spécifié, quel que soit son parent.

Exemples

Web

const results = await execute(db.pipeline()
  .collectionGroup("games")
  .sort(field("name").ascending())
  );
Swift
let results = try await db.pipeline()
  .collectionGroup("games")
  .sort([Field("name").ascending()])
  .execute()

Kotlin

val results = db.pipeline()
    .collectionGroup("games")
    .sort(field("name").ascending())
    .execute()

Java

      Task<Pipeline.Snapshot> results = db.pipeline()
    .collectionGroup("games")
    .sort(field("name").ascending())
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

results = (
    client.pipeline()
    .collection_group("games")
    .sort(Field.of("name").ascending())
    .execute()
)
Java
Pipeline.Snapshot results =
    firestore
        .pipeline()
        .collectionGroup("games")
        .sort(ascending(field("name")))
        .execute()
        .get();
Go
snapshot := client.Pipeline().
	CollectionGroup("games").
	Sort(firestore.Orders(firestore.Ascending(firestore.FieldOf("name")))).
	Execute(ctx)

Comportement

Pour utiliser l'étape collection_group(...), elle doit apparaître comme la première étape du pipeline.

L'ordre des documents renvoyés par l'étape collection_group(...) est instable et ne peut pas être utilisé. Cloud Firestore tentera d' exécuter la requête de la manière la plus efficace possible, ce qui peut modifier l'ordre en fonction de la configuration du schéma ou de l'index. Une étape ultérieure sort(...) peut être utilisée pour obtenir un ordre déterministe.

Par exemple, pour les documents suivants :

Node.js

await db.collection("cities/SF/departments").doc("building").set({name: "SF Building Deparment", employees: 750});
await db.collection("cities/NY/departments").doc("building").set({name: "NY Building Deparment", employees: 1000});
await db.collection("cities/CHI/departments").doc("building").set({name: "CHI Building Deparment", employees: 900});
await db.collection("cities/NY/departments").doc("finance").set({name: "NY Finance Deparment", employees: 1200});

L'étape collection_group(...) peut être utilisée pour renvoyer des documents de chaque collection de services dans toutes les collections parentes de la base de données.

Node.js

const results = await db.pipeline()
  .collectionGroup("departments")
  .sort(field("employees").ascending())
  .execute();

Cette requête génère les documents suivants :

  { name: "SF Building Deparment", employees: 750 }
  { name: "CHI Building Deparment", employees: 900 }
  { name: "NY Building Deparment", employees: 1000 }
  { name: "NY Finance Deparment", employees: 1200 }