Pengumpulan (Tahap Input)

Deskripsi

Menampilkan semua dokumen dari koleksi tertentu. Koleksi dapat disusun bertingkat.

Contoh

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
Android
val results = db.pipeline()
    .collection("users/bob/games")
    .sort(field("name").ascending())
    .execute()
Java
Android
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();
Go
snapshot := client.Pipeline().
	Collection("users/bob/games").
	Sort(firestore.Orders(firestore.Ascending(firestore.FieldOf("name")))).
	Execute(ctx)

Perilaku

Untuk menggunakan tahap collection(...), tahap ini harus muncul sebagai tahap pertama dalam pipeline (atau sub-pipeline).

Urutan dokumen yang ditampilkan dari tahap collection(...) tidak stabil dan tidak dapat diandalkan. Firestore akan mencoba menjalankan kueri dengan cara yang paling efisien, yang dapat mengubah urutan bergantung pada skema atau konfigurasi indeks. Tahap sort(...) berikutnya dapat digunakan untuk mendapatkan pengurutan deterministik.

Misalnya, untuk dokumen berikut:

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

Tahap collection dapat digunakan untuk mengambil semua cities dalam koleksi cities, lalu mengurutkannya dalam urutan naik menurut nama.

Node.js

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

Kueri ini akan menghasilkan dokumen berikut:

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

Subkoleksi

Tahap collection(...) juga dapat digunakan untuk menarget koleksi di bagian induk tertentu dengan memberikan jalur lengkap ke tahap tersebut.

Misalnya, untuk dokumen berikut:

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

Untuk contoh ini, kita hanya menginginkan departemen kota New York.

Node.js

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

Hal ini akan menampilkan semua departemen di jalur lengkap cities/NY/departments.

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