Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

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

يوفر Cloud Firestore وظائف استعلام قوية لتحديد المستندات التي تريد استردادها من مجموعة. يمكن أيضًا استخدام هذه الاستعلامات مع get() أو addSnapshotListener() ، كما هو موضح في Get Data .

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

بشكل افتراضي ، يقوم الاستعلام باسترداد جميع المستندات التي تلبي الاستعلام بترتيب تصاعدي حسب معرف المستند. يمكنك تحديد ترتيب الفرز لبياناتك باستخدام orderBy() ، ويمكنك تحديد عدد المستندات المستردة باستخدام limit() .

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

الويب
citiesRef.orderBy("name").limit(3)
سويفت
citiesRef.order(by: "name").limit(to: 3)
ج موضوعية
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];
  

جافا

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

Kotlin + KTX

citiesRef.orderBy("name").limit(3)
جافا
Query query = cities.orderBy("name").limit(3);
Query query = cities.orderBy("name").limitToLast(3);
بايثون
db.collection(u'cities').order_by(u'name').limit(3).stream()
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 = $citiesRef->orderBy('name')->limit(3);
وحدة
Query query = citiesRef.OrderBy("Name").Limit(3);
سي #
Query query = citiesRef.OrderBy("Name").Limit(3);
روبي
query = cities_ref.order("name").limit(3)

يمكنك أيضًا الفرز بترتيب تنازلي للحصول على آخر 3 مدن:

الويب
citiesRef.orderBy("name", "desc").limit(3)
سويفت
citiesRef.order(by: "name", descending: true).limit(to: 3)
ج موضوعية
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];
  

جافا

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

Kotlin + KTX

citiesRef.orderBy("name", Query.Direction.DESCENDING).limit(3)
جافا
سي بي 70a16994
بايثون
cities_ref = db.collection(u'cities')
query = cities_ref.order_by(
    u'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)
بي أتش بي
$query = $citiesRef->orderBy('name', 'DESC')->limit(3);
وحدة
Query query = citiesRef.OrderByDescending("Name").Limit(3);
سي #
Query query = citiesRef.OrderByDescending("Name").Limit(3);
روبي
query = cities_ref.order("name", "desc").limit(3)

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

الويب
citiesRef.orderBy("state").orderBy("population", "desc")
سويفت
citiesRef
    .order(by: "state")
    .order(by: "population", descending: true)
ج موضوعية
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];
  

جافا

6 ديسمبر 25e25

Kotlin + KTX

citiesRef.orderBy("state").orderBy("population", Query.Direction.DESCENDING)
جافا
Query query = cities.orderBy("state").orderBy("population", Direction.DESCENDING);
بايثون
cities_ref = db.collection(u'cities')
cities_ref.order_by(u'state').order_by(
    u'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)
بي أتش بي
$query = $citiesRef->orderBy('state')->orderBy('population', 'DESC');
وحدة
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
سي #
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
روبي
query = cities_ref.order("state").order("population", "desc")

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

الويب
citiesRef.where("population", ">", 100000).orderBy("population").limit(2)
سويفت
citiesRef
    .whereField("population", isGreaterThan: 100000)
    .order(by: "population")
    .limit(to: 2)
ج موضوعية
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000]
    queryOrderedByField:@"population"]
    queryLimitedTo:2];
  

جافا

ارجوكى 1619

Kotlin + KTX

citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2)
جافا
Query query = cities.whereGreaterThan("population", 2500000L).orderBy("population").limit(2);
بايثون
cities_ref = db.collection(u'cities')
query = cities_ref.where(
    u'population', u'>', 2500000).order_by(u'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)
بي أتش بي
$query = $citiesRef
    ->where('population', '>', 2500000)
    ->orderBy('population')
    ->limit(2);
وحدة
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
سي #
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
روبي
query = cities_ref.where("population", ">", 2_500_000).order("population").limit(2)

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

محددات

لاحظ القيود التالية orderBy() :

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

    صالح : عامل التصفية orderBy حسب نفس المجال

    الويب
    citiesRef.where("population", ">", 100000).orderBy("population")
    
    سويفت
    citiesRef
        .whereField("population", isGreaterThan: 100000)
        .order(by: "population")
    
    ج موضوعية
    [[citiesRef queryWhereField:@"population" isGreaterThan:@100000]
        queryOrderedByField:@"population"];
      

    جافا

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

    Kotlin + KTX

    citiesRef.whereGreaterThan("population", 100000).orderBy("population")
    جافا
    Query query = cities.whereGreaterThan("population", 2500000L).orderBy("population");
    
    بايثون
    cities_ref = db.collection(u'cities')
    query = cities_ref.where(
        u'population', u'>', 2500000).order_by(u'population')
    results = query.stream()
    
    Node.js
    citiesRef.where('population', '>', 2500000).orderBy('population');
    
    اذهب
    query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Asc)
    
    بي أتش بي
    $query = $citiesRef
        ->where('population', '>', 2500000)
        ->orderBy('population');
    
    وحدة
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Population");
    
    سي #
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Population");
    
    روبي
    query = cities_ref.where("population", ">", 2_500_000).order("population")
    

    غير صالح : مرشح النطاق orderBy الأول حسب الحقول المختلفة

    الويب
    citiesRef.where("population", ">", 100000).orderBy("country")
    
    سويفت
    citiesRef
        .whereField("population", isGreaterThan: 100000)
        .order(by: "country")
    
    ج موضوعية
    [[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"country"];
      

    جافا

    citiesRef.whereGreaterThan("population", 100000).orderBy("country");

    Kotlin + KTX

    citiesRef.whereGreaterThan("population", 100000).orderBy("country")
    جافا
    Query query = cities.whereGreaterThan("population", 2500000L).orderBy("country");
    
    بايثون
    cities_ref = db.collection(u'cities')
    query = cities_ref.where(u'population', u'>', 2500000).order_by(u'country')
    results = query.stream()
    
    C ++
    // BAD EXAMPLE -- will crash the program:
    cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000))
        .OrderBy("country");
      
    Node.js
    2b29087ef
    اذهب
    // Note: This is an invalid query. It violates the constraint that range
    // and order by are required to be on the same field.
    query := cities.Where("population", ">", 2500000).OrderBy("country", firestore.Asc)
    
    بي أتش بي
    $query = $citiesRef
        ->where('population', '>', 2500000)
        ->orderBy('country');
    
    وحدة
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Country");
    
    سي #
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Country");
    
    روبي
    query = cities_ref.where("population", ">", 2_500_000).order("country")
    
  • لا يمكنك ترتيب الاستعلام الخاص بك بأي حقل مضمن في المساواة ( = ) أو in البند.