طلب البيانات والحد منها باستخدام 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

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();
متابعة
query := cities.OrderBy("name", firestore.Asc).Limit(3)
query := cities.OrderBy("name", firestore.Asc).LimitToLast(3)
PHP

PHP

للمصادقة على 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

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();
متابعة
query := cities.OrderBy("name", firestore.Desc).Limit(3)
PHP

PHP

للمصادقة على 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

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();
متابعة
query := client.Collection("cities").OrderBy("state", firestore.Asc).OrderBy("population", firestore.Desc)
PHP

PHP

للمصادقة على 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

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();
متابعة
query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Desc).Limit(2)
PHP

PHP

للمصادقة على 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”);