طلب البيانات والحد منها باستخدام 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 واستهدافات "مقاطع التطبيقات".
citiesRef.order(by: "name").limit(to: 3)
Objective-C
ملاحظة: لا يتوفّر هذا المنتج على watchOS واستهدافات "مقاطع التطبيقات".
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];

Kotlin

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 واستهدافات "مقاطع التطبيقات".
citiesRef.order(by: "name", descending: true).limit(to: 3)
Objective-C
ملاحظة: لا يتوفّر هذا المنتج على watchOS واستهدافات "مقاطع التطبيقات".
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];

Kotlin

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 واستهدافات "مقاطع التطبيقات".
citiesRef
  .order(by: "state")
  .order(by: "population", descending: true)
Objective-C
ملاحظة: لا يتوفّر هذا المنتج على watchOS واستهدافات "مقاطع التطبيقات".
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];

Kotlin

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 واستهدافات "مقاطع التطبيقات".
citiesRef
  .whereField("population", isGreaterThan: 100000)
  .order(by: "population")
  .limit(to: 2)
Objective-C
ملاحظة: لا يتوفّر هذا المنتج على watchOS واستهدافات "مقاطع التطبيقات".
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000]
    queryOrderedByField:@"population"]
    queryLimitedTo:2];

Kotlin

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