Bestellen und begrenzen Sie Daten mit Cloud Firestore

Cloud Firestore bietet leistungsstarke Abfragefunktionen zum Angeben, welche Dokumente Sie aus einer Sammlung abrufen möchten. Diese Abfragen können auch mit get() oder addSnapshotListener() verwendet werden, wie unter Get Data beschrieben.

Bestell- und Limitdaten

Standardmäßig ruft eine Abfrage alle Dokumente ab, die die Abfrage erfüllen, in aufsteigender Reihenfolge nach Dokument-ID. Mit orderBy() können Sie die Sortierreihenfolge für Ihre Daten festlegen und mit limit() die Anzahl der abgerufenen Dokumente begrenzen. Wenn Sie limit() angeben, muss der Wert größer oder gleich Null sein.

Beispielsweise könnten Sie die ersten drei Städte alphabetisch abfragen mit:

Web modular API

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

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

Web namespaced API

citiesRef.orderBy("name").limit(3);
Schnell
Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
citiesRef.order(by: "name").limit(to: 3)
Ziel c
Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
[[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();
Gehen
query := cities.OrderBy("name", firestore.Asc).Limit(3)
query := cities.OrderBy("name", firestore.Asc).LimitToLast(3)
PHP

PHP

Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .

$query = $citiesRef->orderBy('name')->limit(3);
Einheit
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Query query = citiesRef.OrderBy("Name").Limit(3);
Rubin
query = cities_ref.order("name").limit(3)

Sie können auch in absteigender Reihenfolge sortieren, um die letzten drei Städte zu erhalten:

Web modular API

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

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

Web namespaced API

citiesRef.orderBy("name", "desc").limit(3);
Schnell
Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
citiesRef.order(by: "name", descending: true).limit(to: 3)
Ziel c
Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
[[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();
Gehen
query := cities.OrderBy("name", firestore.Desc).Limit(3)
PHP

PHP

Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .

$query = $citiesRef->orderBy('name', 'DESC')->limit(3);
Einheit
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Query query = citiesRef.OrderByDescending("Name").Limit(3);
Rubin
query = cities_ref.order("name", "desc").limit(3)

Sie können auch nach mehreren Feldern bestellen. Wenn Sie beispielsweise nach Bundesstaat und innerhalb jedes Bundesstaats nach Bevölkerung in absteigender Reihenfolge sortieren möchten:

Web modular API

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

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

Web namespaced API

citiesRef.orderBy("state").orderBy("population", "desc");
Schnell
Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
citiesRef
  .order(by: "state")
  .order(by: "population", descending: true)
Ziel c
Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
[[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")
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();
Gehen
query := client.Collection("cities").OrderBy("state", firestore.Asc).OrderBy("population", firestore.Desc)
PHP

PHP

Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .

$query = $citiesRef->orderBy('state')->orderBy('population', 'DESC');
Einheit
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
Rubin
query = cities_ref.order("state").order("population", "desc")

Sie können where() -Filter mit orderBy() und limit() kombinieren. Im folgenden Beispiel definieren die Abfragen einen Bevölkerungsschwellenwert, sortieren nach Bevölkerung in aufsteigender Reihenfolge und geben nur die ersten paar Ergebnisse zurück, die den Schwellenwert überschreiten:

Web modular API

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

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

Web namespaced API

citiesRef.where("population", ">", 100000).orderBy("population").limit(2);
Schnell
Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
citiesRef
  .whereField("population", isGreaterThan: 100000)
  .order(by: "population")
  .limit(to: 2)
Ziel c
Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
[[[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();
Gehen
query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Desc).Limit(2)
PHP

PHP

Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .

$query = $citiesRef
    ->where('population', '>', 2500000)
    ->orderBy('population')
    ->limit(2);
Einheit
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
C#
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
Rubin
query = cities_ref.where("population", ">", 2_500_000).order("population").limit(2)

Wenn Sie jedoch einen Filter mit einem Bereichsvergleich ( < , <= , > , >= ) haben, muss Ihre erste Bestellung im selben Feld erfolgen, siehe Liste der orderBy() Einschränkungen unten.

Einschränkungen

Beachten Sie die folgenden Einschränkungen für orderBy() -Klauseln:

  • Eine orderBy() Klausel filtert auch nach der Existenz der angegebenen Felder . Der Ergebnissatz enthält keine Dokumente, die die angegebenen Felder nicht enthalten.
  • Wenn Sie einen Filter mit einem Bereichsvergleich ( < , <= , > , >= ) einschließen, muss Ihre erste Bestellung im selben Feld erfolgen:

    Gültig : Bereichsfilter und orderBy für dasselbe Feld

    Web modular API

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

    Web namespaced API

    citiesRef.where("population", ">", 100000).orderBy("population");
    Schnell
    Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
    citiesRef
      .whereField("population", isGreaterThan: 100000)
      .order(by: "population")
    Ziel c
    Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
    [[citiesRef queryWhereField:@"population" isGreaterThan:@100000]
        queryOrderedByField:@"population"];

    Kotlin+KTX

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

    Java

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

    Dart

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

    Python

    cities_ref = db.collection("cities")
    query = cities_ref.where(filter=FieldFilter("population", ">", 2500000)).order_by(
        "population"
    )
    results = query.stream()
    Node.js
    citiesRef.where('population', '>', 2500000).orderBy('population');
    Gehen
    query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Asc)
    PHP

    PHP

    Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .

    $query = $citiesRef
        ->where('population', '>', 2500000)
        ->orderBy('population');
    Einheit
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Population");
    C#
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Population");
    Rubin
    query = cities_ref.where("population", ">", 2_500_000).order("population")

    Ungültig : Bereichsfilter und erstes orderBy für verschiedene Felder

    Web modular API

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

    Web namespaced API

    citiesRef.where("population", ">", 100000).orderBy("country");
    Schnell
    Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
    citiesRef
      .whereField("population", isGreaterThan: 100000)
      .order(by: "country")
    Ziel c
    Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
    [[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"country"];

    Kotlin+KTX

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

    Java

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

    Dart

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

    Python

    cities_ref = db.collection("cities")
    query = cities_ref.where(filter=FieldFilter("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');
    Gehen
    // 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

    PHP

    Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .

    $invalidRangeQuery = $citiesRef
        ->where('population', '>', 2500000)
        ->orderBy('country');
    Einheit
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Country");
    C#
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Country");
    Rubin
    query = cities_ref.where("population", ">", 2_500_000).order("country")

orderBy und Existenz

Wenn Sie eine Abfrage nach einem bestimmten Feld sortieren, kann die Abfrage nur die Dokumente zurückgeben, in denen das Sortierfeld vorhanden ist.

Die folgende Abfrage würde beispielsweise keine Dokumente zurückgeben, bei denen das population nicht festgelegt ist, selbst wenn sie ansonsten den Abfragefiltern entsprechen.

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

Ein ähnlicher Effekt gilt für Ungleichheiten. Eine Abfrage mit einem Ungleichheitsfilter für ein Feld impliziert auch eine Sortierung nach diesem Feld. Die folgende Abfrage gibt keine Dokumente ohne population zurück, selbst wenn in diesem Dokument country = USA . Um dieses Problem zu umgehen, können Sie für jede Bestellung separate Abfragen ausführen oder allen Feldern, nach denen Sie sortieren, einen Wert zuweisen.

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

Die obige Abfrage enthält eine implizite Reihenfolge nach der Ungleichung und entspricht der folgenden:

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