Sammlung

Beschreibung

Gibt alle Dokumente aus einer bestimmten Sammlung zurück. Die Sammlung kann verschachtelt werden.

Beispiele

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

Verhalten

Damit die Phase collection(...) verwendet werden kann, muss sie als erste Phase in der Pipeline (oder Unterpipeline) aufgeführt sein.

Die Reihenfolge der Dokumente, die in der collection(...)-Phase zurückgegeben werden, ist instabil und kann nicht als zuverlässig angesehen werden. Firestore versucht, die Abfrage so effizient wie möglich auszuführen. Die Reihenfolge kann sich je nach Schema oder Indexkonfiguration ändern. Mit einer nachfolgenden sort(...)-Phase kann eine deterministische Reihenfolge erreicht werden.

Beispiel:

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

In der Phase collection können alle Städte in der Sammlung cities abgerufen und dann in aufsteigender Reihenfolge nach Namen sortiert werden.

Node.js

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

Mit dieser Abfrage werden die folgenden Dokumente erstellt:

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

Untergeordnete Sammlungen

Mit der Phase collection(...) können Sie auch Sammlungen unter einem bestimmten übergeordneten Element ausrichten, indem Sie den vollständigen Pfad zur Phase angeben.

Beispiel:

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

In diesem Beispiel möchten wir nur die Abteilungen von New York City.

Node.js

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

Dadurch werden alle Abteilungen unter dem vollständigen Pfad cities/NY/departments zurückgegeben.

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