Daten sortieren und beschränken

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 einen 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:

Webversion 9

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

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

Webversion 8

citiesRef.orderBy("name").limit(3);
Swift
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
citiesRef.order(by: "name").limit(to: 3)
Objective-C
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];
Kotlin+KTX
Android
citiesRef.orderBy("name").limit(3)
Java
Android
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
(Async)
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();
Einfach loslegen (Go)
query := cities.OrderBy("name", firestore.Asc).Limit(3)
query := cities.OrderBy("name", firestore.Asc).LimitToLast(3)
PHP

PHP

Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Firestore zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

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

Webversion 9

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

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

Webversion 8

citiesRef.orderBy("name", "desc").limit(3);
Swift
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
citiesRef.order(by: "name", descending: true).limit(to: 3)
Objective-C
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];
Kotlin+KTX
Android
citiesRef.orderBy("name", Query.Direction.DESCENDING).limit(3)
Java
Android
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
(Async)
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();
Einfach loslegen (Go)
query := cities.OrderBy("name", firestore.Desc).Limit(3)
PHP

PHP

Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Firestore zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

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:

Webversion 9

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

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

Webversion 8

citiesRef.orderBy("state").orderBy("population", "desc");
Swift
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
citiesRef
  .order(by: "state")
  .order(by: "population", descending: true)
Objective-C
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];
Kotlin+KTX
Android
citiesRef.orderBy("state").orderBy("population", Query.Direction.DESCENDING)
Java
Android
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
(Async)
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();
Einfach loslegen (Go)
query := client.Collection("cities").OrderBy("state", firestore.Asc).OrderBy("population", firestore.Desc)
PHP

PHP

Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Firestore zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

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:

Webversion 9

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

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

Webversion 8

citiesRef.where("population", ">", 100000).orderBy("population").limit(2);
Swift
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
citiesRef
  .whereField("population", isGreaterThan: 100000)
  .order(by: "population")
  .limit(to: 2)
Objective-C
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000]
    queryOrderedByField:@"population"]
    queryLimitedTo:2];
Kotlin+KTX
Android
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2)
Java
Android
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
(Async)
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();
Einfach loslegen (Go)
query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Desc).Limit(2)
PHP

PHP

Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Firestore zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

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, kann die Abfrage nur die Dokumente zurückgeben, in denen das Feld „Sortieren nach“ vorhanden ist.

Die folgende Abfrage gibt beispielsweise keine Dokumente zurück, bei denen das Feld population nicht festgelegt ist, auch wenn sie ansonsten den Abfragefiltern entsprechen.

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

Ein damit verbundener Effekt gilt für Ungleichungen. Eine Abfrage mit einem Ungleichheitsfilter für ein Feld impliziert auch die Sortierung nach diesem Feld. Die folgende Abfrage gibt keine Dokumente ohne das Feld population zurück, selbst wenn country = USA in diesem Dokument vorhanden ist . Als Behelfslösung können Sie für jede Sortierung 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 Sortierung nach der Ungleichheit und entspricht Folgendem:

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