الوصف
تعرض جميع المستندات من مجموعة معيّنة. يمكن أن تكون المجموعة متداخلة.
أمثلة
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();
متابعة
snapshot := client.Pipeline(). Collection("users/bob/games"). Sort(firestore.Orders(firestore.Ascending(firestore.FieldOf("name")))). Execute(ctx)
السلوك
لاستخدام مرحلة collection(...)، يجب أن تظهر كأول مرحلة في مسار البيانات (أو مسار البيانات الفرعي).
إنّ ترتيب المستندات التي يتم عرضها من مرحلة collection(...) غير ثابت ولا يمكن الاعتماد عليه. سيحاول Firestore تنفيذ طلب البحث بأكثر الطرق فعاليةً، ما قد يؤدي إلى تغيير الترتيب استنادًا إلى المخطط أو إعدادات الفهرس. يمكن استخدام مرحلة sort(...) لاحقة
للحصول على ترتيب محدّد.
على سبيل المثال، بالنسبة إلى المستندات التالية:
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"});
يمكن استخدام مرحلة collection لاسترداد جميع المدن في مجموعة cities ثم ترتيبها تصاعديًا حسب الاسم.
Node.js
const results = await db.pipeline()
.collection("/cities")
.sort(field("name").ascending())
.execute();
ينتج عن طلب البحث هذا المستندات التالية:
{ name: "Chicago", state: "Illinois" }
{ name: "New York City", state: "New York" }
{ name: "San Francisco", state: "California" }
المجموعات الفرعية
يمكن أيضًا استخدام مرحلة collection(...) لاستهداف مجموعات ضمن عنصر رئيسي معيّن من خلال تقديم المسار الكامل إلى المرحلة.
على سبيل المثال، بالنسبة إلى المستندات التالية:
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});
في هذا المثال، نريد الأقسام في مدينة نيويورك فقط.
Node.js
const results = await db.pipeline()
.collection("/cities/NY/departments")
.sort(field("employees").ascending())
.execute();
سيؤدي ذلك إلى عرض جميع الأقسام ضمن المسار الكامل cities/NY/departments.
{ name: "NY Building Deparment", employees: 1000 }
{ name: "NY Finance Deparment", employees: 1200 }