الوصف
لترتيب المستندات المُدخَلة استنادًا إلى ترتيب فرز واحد أو أكثر محدّد.
أمثلة
Web
const results = await execute(db.pipeline() .collection("books") .sort( field("release_date").descending(), field("author").ascending() ) );
Swift
let results = try await db.pipeline() .collection("books") .sort([ Field("release_date").descending(), Field("author").ascending() ]) .execute()
Kotlin
val results = db.pipeline() .collection("books") .sort( field("release_date").descending(), field("author").ascending() ) .execute()
Java
Task<Pipeline.Snapshot> results = db.pipeline() .collection("books") .sort( field("release_date").descending(), field("author").ascending() ) .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field results = ( client.pipeline() .collection("books") .sort(Field.of("release_date").descending(), Field.of("author").ascending()) .execute() )
Java
Pipeline.Snapshot results = firestore .pipeline() .collection("books") .sort(descending(field("release_date")), ascending(field("author"))) .execute() .get();
السلوك
ترتيب الفرز
يتبع ترتيب الفرز ترتيب أنواع القيم في Cloud Firestore
الترتيب الحتمي للنتائج
إذا لم تكن هناك مرحلة sort في طلب البحث، يكون ترتيب النتائج المعروضة غير حتمي وقد يختلف بين عمليات التنفيذ. إذا كانت هناك مرحلة sort، ولكن لم تتمكّن عبارات الترتيب من إنتاج ترتيب فريد بين النتائج المعروضة، قد يظل ترتيب النتائج المعروضة مختلفًا بين عمليات التنفيذ.
على سبيل المثال، فرز المدن حسب country للمدن بترتيب تصاعدي مقابل مجموعة البيانات التالية:
{ name: "Los Angeles", state: "CA", country: "USA", population: 3970000 },
{ name: "New York", state: "NY", country: "USA", population: 8530000 }
{ name: "San Francisco", state: "CA", country: "USA", population: 870000 },
يمكن أن ينتج أي تبديل للمستندات الثلاثة في مجموعة البيانات لأنّها جميعًا تتضمّن السمة country نفسها. لإنتاج ترتيب حتمي للنتائج، يمكنك إضافة ترتيب فرز إلى name في الطلب:
Node.js
const results = await db.pipeline()
.collection("/cities")
.sort(field("country").ascending(), fieldd("__name__").ascending())
.execute();
سيتم استخدام اسم المستند الفريد كمعيار لكسر التعادل عندما تتضمّن مستندات متعددة القيمة نفسها في country. يُرجى العِلم أنّه يمكن استخدام أي حقول أخرى تشكّل مع الحقل country مفتاحًا فريدًا للمستند ضمن المجموعة لإنتاج ترتيب محدد للنتائج.
ترتيب القيم المتساوية
يتم ترتيب القيم المتساوية معًا، ولكن ترتيب النتائج ضمن الفئة المتساوية ليس محددًا وفقًا لمناقشة الترتيب المحدّد للنتائج. على سبيل المثال، فرز المدن حسب size بترتيب تصاعدي مقابل مجموعة البيانات التالية:
{ name: "Los Angeles", state: "CA", country: "USA", size: 3970000 },
{ name: "Mexico City", state: null, country: "Mexico", size: 3970000.0 },
يمكن أن تنتج أي تبديل للمستندَين في مجموعة البيانات لأنّ كلا المستندَين يتضمّنان القيمة size المكافئة 3970000.
مراحل ترتيب متعددة
عندما يحتوي طلب البحث على مراحل ترتيب متعدّدة متتالية، لن يكون للمرحلة الأخيرة من الترتيب أي تأثير على نتائج طلب البحث. يُرجى العِلم أنّ هذا يختلف عن سلوك عبارة orderBy في Core API.
تحسين ترتيب أعلى N
عند استخدام limit(...) بعد sort، يمكن استخدام ترتيب لأعلى n عناصر. يحدّ هذا التحسين من استخدام الذاكرة في مرحلة الترتيب من خلال السماح لها بتخزين N مستندات فقط في المرة الواحدة، كما هو محدّد بواسطة limit(...)، ما يجعل عملية الترتيب أكثر فعالية من حيث استخدام الذاكرة.
القيم الخالية وغير المتوفّرة
إذا لم يكن الحقل المحدّد في ترتيب متوفّرًا في المستند، يتم ترتيب قيمته كما لو كانت null. على سبيل المثال، ترتيب المدن حسب
state للمدن، بترتيب تصاعدي مقارنةً بمجموعة البيانات التالية:
{ name: "Los Angeles", state: "CA", country: "USA", population: 3970000 },
{ name: "Mexico City", state: null, country: "Mexico", population: 9200000 },
{ name: "New York", state: "NY", country: "USA", population: 8530000 }
{ name: "San Francisco", state: "CA", country: "USA", population: 870000 },
{ name: "Toronto", country: "Canada", population: 2930000 },
تؤدي إلى النتائج التالية حيث يتم ترتيب المستند "تورونتو" والمستند "مدينة مكسيكو" على النحو null وقبل المستندات الأخرى.
{ name: "Toronto", country: "Canada", population: 2930000 },
{ name: "Mexico City", state: null, country: "Mexico", population: 9200000 },
{ name: "Los Angeles", state: "CA", country: "USA", population: 3970000 },
{ name: "San Francisco", state: "CA", country: "USA", population: 870000 },
{ name: "New York", state: "NY", country: "USA", population: 8530000 }