Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

הזמינו והגבילו נתונים באמצעות Cloud Firestore

Cloud Firestore מספק פונקציונליות שאילתה עוצמתית לציון אילו מסמכים ברצונך לאחזר מאוסף. שאילתות אלה יכולים לשמש גם עם או get() או addSnapshotListener() , כמתואר קבל נתונים .

הזמינו והגבילו את הנתונים

כברירת מחדל, שאילתה מאחזרת את כל המסמכים העונים על השאילתה בסדר עולה לפי מזהה המסמך. אתה יכול לציין את סדר המיון עבור הנתונים שלך באמצעות orderBy() , ואתה יכול להגביל את מספר המסמכים לאחזר באמצעות limit() .

לדוגמה, אתה יכול לשאול את שלושת הערים הראשונות באלפבית לפי:

גרסת אינטרנט 9

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

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

גרסת אינטרנט 8

citiesRef.orderBy("name").limit(3);
מָהִיר
citiesRef.order(by: "name").limit(to: 3)
Objective-C
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];

ג'אווה

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

קוטלין+KTX

citiesRef.orderBy("name").limit(3)
ג'אווה
Query query = cities.orderBy("name").limit(3);
Query query = cities.orderBy("name").limitToLast(3);
פִּיתוֹן
cities_ref = db.collection("cities")
query = cities_ref.order_by("name").limit_to_last(2)
results = query.get()

פִּיתוֹן

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
$query = $citiesRef->orderBy('name')->limit(3);
אַחְדוּת
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Query query = citiesRef.OrderBy("Name").Limit(3);
אוֹדֶם
query = cities_ref.order("name").limit(3)

אתה יכול גם למיין בסדר יורד כדי לקבל את 3 הערים האחרונות:

גרסת אינטרנט 9

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

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

גרסת אינטרנט 8

citiesRef.orderBy("name", "desc").limit(3);
מָהִיר
citiesRef.order(by: "name", descending: true).limit(to: 3)
Objective-C
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];

ג'אווה

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

קוטלין+KTX

citiesRef.orderBy("name", Query.Direction.DESCENDING).limit(3)
ג'אווה
Query query = cities.orderBy("name", Direction.DESCENDING).limit(3);
פִּיתוֹן
cities_ref = db.collection(u'cities')
query = cities_ref.order_by(
    u'name', direction=firestore.Query.DESCENDING).limit(3)
results = query.stream()

פִּיתוֹן

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
$query = $citiesRef->orderBy('name', 'DESC')->limit(3);
אַחְדוּת
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Query query = citiesRef.OrderByDescending("Name").Limit(3);
אוֹדֶם
query = cities_ref.order("name", "desc").limit(3)

ניתן גם להזמין לפי מספר שדות. לדוגמה, אם רצית להזמין לפי מדינה, ובתוך כל מדינה סדר לפי אוכלוסיה בסדר יורד:

גרסת אינטרנט 9

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

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

גרסת אינטרנט 8

citiesRef.orderBy("state").orderBy("population", "desc");
מָהִיר
citiesRef
    .order(by: "state")
    .order(by: "population", descending: true)
Objective-C
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];

ג'אווה

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

קוטלין+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)

פִּיתוֹן

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
$query = $citiesRef->orderBy('state')->orderBy('population', 'DESC');
אַחְדוּת
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
אוֹדֶם
query = cities_ref.order("state").order("population", "desc")

ניתן לשלב where() מסננים עם orderBy() ו limit() . בדוגמה הבאה, השאילתות מגדירות רף אוכלוסייה, ממיין לפי אוכלוסייה בסדר עולה ומחזירות רק את התוצאות הראשונות החורגות מהסף:

גרסת אינטרנט 9

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

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

גרסת אינטרנט 8

citiesRef.where("population", ">", 100000).orderBy("population").limit(2);
מָהִיר
citiesRef
    .whereField("population", isGreaterThan: 100000)
    .order(by: "population")
    .limit(to: 2)
Objective-C
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000]
    queryOrderedByField:@"population"]
    queryLimitedTo:2];

ג'אווה

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

קוטלין+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()

פִּיתוֹן

cities_ref = db.collection("cities")
query = cities_ref.where("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
$query = $citiesRef
    ->where('population', '>', 2500000)
    ->orderBy('population')
    ->limit(2);
אַחְדוּת
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
C#
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 על אותו השדה

    גרסת אינטרנט 9

    import { query, where, orderBy } from "firebase/firestore";  
    
    const q = query(citiesRef, where("population", ">", 100000), orderBy("population"));

    גרסת אינטרנט 8

    citiesRef.where("population", ">", 100000).orderBy("population");
    מָהִיר
    citiesRef
        .whereField("population", isGreaterThan: 100000)
        .order(by: "population")
    Objective-C
    [[citiesRef queryWhereField:@"population" isGreaterThan:@100000]
        queryOrderedByField:@"population"];

    ג'אווה

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

    קוטלין+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()

    פִּיתוֹן

    cities_ref = db.collection("cities")
    query = cities_ref.where("population", ">", 2500000).order_by("population")
    results = query.stream()
    Node.js
    citiesRef.where('population', '>', 2500000).orderBy('population');
    ללכת
    query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Asc)
    PHP
    $query = $citiesRef
        ->where('population', '>', 2500000)
        ->orderBy('population');
    אַחְדוּת
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Population");
    C#
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Population");
    אוֹדֶם
    query = cities_ref.where("population", ">", 2_500_000).order("population")

    מסנן הטווח ראשון: חוקי orderBy על תחומים שונים

    גרסת אינטרנט 9

    import { query, where, orderBy } from "firebase/firestore";  
    
    const q = query(citiesRef, where("population", ">", 100000), orderBy("country"));

    גרסת אינטרנט 8

    citiesRef.where("population", ">", 100000).orderBy("country");
    מָהִיר
    citiesRef
        .whereField("population", isGreaterThan: 100000)
        .order(by: "country")
    Objective-C
    [[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"country"];

    ג'אווה

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

    קוטלין+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()

    פִּיתוֹן

    cities_ref = db.collection("cities")
    query = cities_ref.where("population", ">", 2500000).order_by("country")
    results = query.stream()
    C ++
    // BAD EXAMPLE -- will crash the program:
    cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000))
        .OrderBy("country");
    Node.js
    citiesRef.where('population', '>', 2500000).orderBy('country');
    ללכת
    // 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)
    PHP
    $invalidRangeQuery = $citiesRef
        ->where('population', '>', 2500000)
        ->orderBy('country');
    אַחְדוּת
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Country");
    C#
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Country");
    אוֹדֶם
    query = cities_ref.where("population", ">", 2_500_000).order("country")
  • אתה לא יכול להזמין את השאילתה לפי כל שדה נכלל שוויון ( = ) או in סעיף.