طلب البيانات والحد منها باستخدام Cloud Firestore

توفّر Cloud Firestore وظائف استعلام فعّالة لتحديد المستندات التي تريد استردادها من المجموعة. يمكن أيضًا استخدام طلبات البحث هذه مع get() أو addSnapshotListener()، كما هو موضّح في الحصول على البيانات.

بيانات الطلب والحدود

بشكل افتراضي، يسترد الاستعلام جميع المستندات التي تلبي الاستعلام بترتيب تصاعدي حسب معرف المستند. يمكنك تحديد نظام ترتيب البيانات باستخدام "orderBy()"، ويمكنك الحدّ من عدد المستندات التي يتم استردادها باستخدام "limit()". إذا حددت limit()، يجب أن تكون القيمة أكبر من أو تساوي صفرًا.

على سبيل المثال، يمكنك الاستعلام عن أول 3 مدن أبجديًا باستخدام:

Web

import { query, orderBy, limit } from "firebase/firestore";  

const q = query(citiesRef, orderBy("name"), limit(3));

Web

citiesRef.orderBy("name").limit(3);
Swift
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
citiesRef.order(by: "name").limit(to: 3)
Objective-C
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];

Kotlin+KTX

citiesRef.orderBy("name").limit(3)

Java

citiesRef.orderBy("name").limit(3);

Dart

final citiesRef = db.collection("cities");
citiesRef.orderBy("name").limit(3);
Java
Query query = cities.orderBy("name").limit(3);
Query query = cities.orderBy("name").limitToLast(3);
Python
cities_ref = db.collection("cities")
query = cities_ref.order_by("name").limit_to_last(2)
results = query.get()

Python

cities_ref = db.collection("cities")
query = cities_ref.order_by("name").limit_to_last(2)
results = await query.get()
C++‎
cities_ref.OrderBy("name").Limit(3);
Node.js
const firstThreeRes = await citiesRef.orderBy('name').limit(3).get();
Go
query := cities.OrderBy("name", firestore.Asc).Limit(3)
query := cities.OrderBy("name", firestore.Asc).LimitToLast(3)
PHP

PHP

لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.

$query = $citiesRef->orderBy('name')->limit(3);
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#‎
Query query = citiesRef.OrderBy("Name").Limit(3);
لغة Ruby
query = cities_ref.order("name").limit(3)

يمكنك أيضًا الترتيب تنازليًا لعرض آخر 3 مدن:

Web

import { query, orderBy, limit } from "firebase/firestore";  

const q = query(citiesRef, orderBy("name", "desc"), limit(3));

Web

citiesRef.orderBy("name", "desc").limit(3);
Swift
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
citiesRef.order(by: "name", descending: true).limit(to: 3)
Objective-C
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];

Kotlin+KTX

citiesRef.orderBy("name", Query.Direction.DESCENDING).limit(3)

Java

citiesRef.orderBy("name", Direction.DESCENDING).limit(3);

Dart

final citiesRef = db.collection("cities");
citiesRef.orderBy("name", descending: true).limit(3);
Java
Query query = cities.orderBy("name", Direction.DESCENDING).limit(3);
Python
cities_ref = db.collection("cities")
query = cities_ref.order_by("name", direction=firestore.Query.DESCENDING).limit(3)
results = query.stream()

Python

cities_ref = db.collection("cities")
query = cities_ref.order_by("name", direction=firestore.Query.DESCENDING).limit(3)
results = query.stream()
C++‎
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
const lastThreeRes = await citiesRef.orderBy('name', 'desc').limit(3).get();
Go
query := cities.OrderBy("name", firestore.Desc).Limit(3)
PHP

PHP

لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.

$query = $citiesRef->orderBy('name', 'DESC')->limit(3);
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#‎
Query query = citiesRef.OrderByDescending("Name").Limit(3);
لغة Ruby
query = cities_ref.order("name", "desc").limit(3)

ويمكنك أيضًا الترتيب حسب عدة حقول. على سبيل المثال، إذا كنت تريد الترتيب حسب الولاية، وداخل كل ولاية حسب عدد السكان بترتيب تنازلي:

Web

import { query, orderBy } from "firebase/firestore";  

const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));

Web

citiesRef.orderBy("state").orderBy("population", "desc");
Swift
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
citiesRef
  .order(by: "state")
  .order(by: "population", descending: true)
Objective-C
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];

Kotlin+KTX

citiesRef.orderBy("state").orderBy("population", Query.Direction.DESCENDING)

Java

citiesRef.orderBy("state").orderBy("population", Direction.DESCENDING);

Dart

final citiesRef = db.collection("cities");
citiesRef.orderBy("state").orderBy("population", descending: true);
Java
Query query = cities.orderBy("state").orderBy("population", Direction.DESCENDING);
Python
cities_ref = db.collection("cities")
ordered_city_ref = cities_ref.order_by("state").order_by(
    "population", direction=firestore.Query.DESCENDING
)

Python

cities_ref = db.collection("cities")
cities_ref.order_by("state").order_by(
    "population", direction=firestore.Query.DESCENDING
)
C++‎
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
const byStateByPopRes = await citiesRef.orderBy('state').orderBy('population', 'desc').get();
Go
query := client.Collection("cities").OrderBy("state", firestore.Asc).OrderBy("population", firestore.Desc)
PHP

PHP

لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.

$query = $citiesRef->orderBy('state')->orderBy('population', 'DESC');
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#‎
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
لغة Ruby
query = cities_ref.order("state").order("population", "desc")

يمكنك الجمع بين where() فلتر مع orderBy() وlimit(). في المثال التالي، تحدد الاستعلامات الحد الأدنى لعدد السكان، ويتم فرزها حسب المجموعة بالكامل بترتيب تصاعدي، وتعرض فقط النتائج القليلة الأولى التي تتجاوز الحد الأدنى:

Web

import { query, where, orderBy, limit } from "firebase/firestore";  

const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));

Web

citiesRef.where("population", ">", 100000).orderBy("population").limit(2);
Swift
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
citiesRef
  .whereField("population", isGreaterThan: 100000)
  .order(by: "population")
  .limit(to: 2)
Objective-C
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000]
    queryOrderedByField:@"population"]
    queryLimitedTo:2];

Kotlin+KTX

citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2)

Java

citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2);

Dart

final citiesRef = db.collection("cities");
citiesRef
    .where("population", isGreaterThan: 100000)
    .orderBy("population")
    .limit(2);
Java
Query query = cities.whereGreaterThan("population", 2500000L).orderBy("population").limit(2);
Python
cities_ref = db.collection("cities")
query = (
    cities_ref.where(filter=FieldFilter("population", ">", 2500000))
    .order_by("population")
    .limit(2)
)
results = query.stream()

Python

cities_ref = db.collection("cities")
query = (
    cities_ref.where(filter=FieldFilter("population", ">", 2500000))
    .order_by("population")
    .limit(2)
)
results = query.stream()
C++‎
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000))
    .OrderBy("population")
    .Limit(2);
Node.js
const biggestRes = await citiesRef.where('population', '>', 2500000)
  .orderBy('population').limit(2).get();
Go
query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Desc).Limit(2)
PHP

PHP

لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.

$query = $citiesRef
    ->where('population', '>', 2500000)
    ->orderBy('population')
    ->limit(2);
Unity
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
C#‎
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
لغة Ruby
query = cities_ref.where("population", ">", 2_500_000).order("population").limit(2)

أمّا إذا كان لديك فلتر بمقارنة النطاقات (<، و<=، و>، و>=)، يجب أن يكون ترتيبك الأول في الحقل نفسه، واطّلِع على قائمة قيود orderBy() أدناه.

القيود

لاحِظ القيد التالي لفقرات orderBy():

orderBy والوجود

عند طلب استعلام من خلال حقل معين، يمكن للاستعلام عرض المستندات التي يوجد بها حقل الترتيب حسب فقط.

على سبيل المثال، لن يعرض طلب البحث التالي أي مستندات لم يتم ضبط الحقل population فيها، حتى إذا كانت تتوافق مع فلاتر طلبات البحث.

Java
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);

ينطبق تأثير ذو صلة على المتباينات. يعني الاستعلام الذي يحتوي على عامل تصفية عدم مساواة في حقل أيضًا الطلب حسب هذا الحقل. لا يعرض طلب البحث التالي مستندات بدون حقل population حتى إذا كان country = USA في ذلك المستند . كحل بديل، يمكنك تنفيذ استعلامات منفصلة لكل طلب أو يمكنك تعيين قيمة لجميع الحقول التي تقوم بالترتيب.

Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));

يتضمن الاستعلام أعلاه ترتيبًا ضمنيًا على عدم المساواة ويعادل ما يلي:

Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);