Daten mit Cloud Firestore bestellen und begrenzen

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

Daten sortieren und beschränken

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

So können Sie beispielsweise die ersten 3 Städte nach dem Alphabet abfragen:

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

const q = query(citiesRef, orderBy("name"), limit(3));
citiesRef.orderBy("name").limit(3);
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
citiesRef.order(by: "name").limit(to: 3)
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];
citiesRef.orderBy("name").limit(3)
citiesRef.orderBy("name").limit(3);
final citiesRef = db.collection("cities");
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()
cities_ref.OrderBy("name").Limit(3);
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

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

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

Sie können auch in absteigender Reihenfolge sortieren, um die letzten 3 Städte abzurufen:

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

const q = query(citiesRef, orderBy("name", "desc"), limit(3));
citiesRef.orderBy("name", "desc").limit(3);
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
citiesRef.order(by: "name", descending: true).limit(to: 3)
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];
citiesRef.orderBy("name", Query.Direction.DESCENDING).limit(3)
citiesRef.orderBy("name", Direction.DESCENDING).limit(3);
final citiesRef = db.collection("cities");
citiesRef.orderBy("name", descending: true).limit(3);
Query query = cities.orderBy("name", Direction.DESCENDING).limit(3);
cities_ref = db.collection("cities")
query = cities_ref.order_by("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()
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
const lastThreeRes = await citiesRef.orderBy('name', 'desc').limit(3).get();
query := cities.OrderBy("name", firestore.Desc).Limit(3)

PHP

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

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

Sie können auch nach mehreren Feldern sortieren. Wenn Sie zum Beispiel nach Bundesland und innerhalb jedes Bundeslands in absteigender Reihenfolge nach Bevölkerungszahl sortieren möchten, gehen Sie so vor:

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

const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
citiesRef.orderBy("state").orderBy("population", "desc");
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
citiesRef
  .order(by: "state")
  .order(by: "population", descending: true)
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];
citiesRef.orderBy("state").orderBy("population", Query.Direction.DESCENDING)
citiesRef.orderBy("state").orderBy("population", Direction.DESCENDING);
final citiesRef = db.collection("cities");
citiesRef.orderBy("state").orderBy("population", descending: true);
Query query = cities.orderBy("state").orderBy("population", Direction.DESCENDING);
cities_ref = db.collection("cities")
ordered_city_ref = cities_ref.order_by("state").order_by(
    "population", direction=firestore.Query.DESCENDING
)
cities_ref = db.collection("cities")
cities_ref.order_by("state").order_by(
    "population", direction=firestore.Query.DESCENDING
)
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
const byStateByPopRes = await citiesRef.orderBy('state').orderBy('population', 'desc').get();
query := client.Collection("cities").OrderBy("state", firestore.Asc).OrderBy("population", firestore.Desc)

PHP

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

$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")

Sie können where()-Filter mit orderBy() und limit() kombinieren. Die Abfragen im folgenden Beispiel definieren einen Bevölkerungsgrenzwert, sortieren in aufsteigender Reihenfolge nach Bevölkerungszahl und geben nur die ersten Ergebnisse zurück, die den Grenzwert überschreiten:

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

const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
citiesRef.where("population", ">", 100000).orderBy("population").limit(2);
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
citiesRef
  .whereField("population", isGreaterThan: 100000)
  .order(by: "population")
  .limit(to: 2)
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000]
    queryOrderedByField:@"population"]
    queryLimitedTo:2];
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2)
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2);
final citiesRef = db.collection("cities");
citiesRef
    .where("population", isGreaterThan: 100000)
    .orderBy("population")
    .limit(2);
Query query = cities.whereGreaterThan("population", 2500000L).orderBy("population").limit(2);
cities_ref = db.collection("cities")
query = (
    cities_ref.where(filter=FieldFilter("population", ">", 2500000))
    .order_by("population")
    .limit(2)
)
results = query.stream()
cities_ref = db.collection("cities")
query = (
    cities_ref.where(filter=FieldFilter("population", ">", 2500000))
    .order_by("population")
    .limit(2)
)
results = query.stream()
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000))
    .OrderBy("population")
    .Limit(2);
const biggestRes = await citiesRef.where('population', '>', 2500000)
  .orderBy('population').limit(2).get();
query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Desc).Limit(2)

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

Bei einem Filter mit einem Bereichsvergleich (<, <=, >, >=) muss sich Ihre erste Sortierung jedoch auf dasselbe Feld beziehen. Siehe dazu auch die folgende Liste von Beschränkungen für orderBy().

Beschränkungen

Beachten Sie die folgende Einschränkung für orderBy()-Klauseln:

orderBy und Existenz

Wenn Sie eine Abfrage nach einem bestimmten Feld sortieren, können nur die Dokumente zurückgegeben werden, in denen das Sortierfeld vorhanden ist.

Mit der folgenden Abfrage werden beispielsweise keine Dokumente zurückgegeben, in denen das Feld population nicht festgelegt ist, auch wenn sie ansonsten die Abfragefilter erfüllen.

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-Feld zurück, auch wenn country = USA in diesem Dokument leer ist . Als Problemumgehung können Sie für jede Sortierung separate Abfragen ausführen oder einen Wert für alle Felder zuweisen, nach denen Sie sortieren möchten.

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

Die obige Abfrage enthält eine implizite Sortierung nach der Ungleichheit und entspricht der folgenden Abfrage:

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