Collection

Description

Renvoie tous les documents d'une collection donnée. La collection peut être imbriquée.

Exemples

Web

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

Kotlin

val results = db.pipeline()
    .collection("users/bob/games")
    .sort(field("name").ascending())
    .execute()

Java

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

results = (
    client.pipeline()
    .collection("users/bob/games")
    .sort(Field.of("name").ascending())
    .execute()
)
Java
Pipeline.Snapshot results =
    firestore
        .pipeline()
        .collection("users/bob/games")
        .sort(ascending(field("name")))
        .execute()
        .get();

Comportement

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

L'ordre des documents renvoyés par l'étape collection(...) est instable et ne peut pas être utilisé. Firestore tente 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 sort(...) ultérieure peut être utilisée pour obtenir un ordre déterministe.

Par exemple, pour les documents suivants :

Node.js

await db.collection("cities").doc("SF").set({name: "San Francsico", state: "California"});
await db.collection("cities").doc("NYC").set({name: "New York City", state: "New York"});
await db.collection("cities").doc("CHI").set({name: "Chicago", state: "Illinois"});
await db.collection("states").doc("CA").set({name: "California"});

L'étape collection peut être utilisée pour récupérer toutes les villes de la collection cities, puis les trier par ordre alphabétique.

Node.js

const results = await db.pipeline()
  .collection("/cities")
  .sort(field("name").ascending())
  .execute();

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

  { name: "Chicago", state: "Illinois" }
  { name: "New York City", state: "New York" }
  { name: "San Francisco", state: "California" }

Sous-collections

L'étape collection(...) peut également être utilisée pour cibler des collections sous un parent spécifique en fournissant le chemin complet à l'étape.

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});

Dans cet exemple, nous ne voulons que les services de la ville de New York.

Node.js

const results = await db.pipeline()
  .collection("/cities/NY/departments")
  .sort(field("employees").ascending())
  .execute();

Cette requête renvoie tous les services sous le chemin complet cities/NY/departments.

  { name: "NY Building Deparment", employees: 1000 }
  { name: "NY Finance Deparment", employees: 1200 }