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 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
citiesRef.order(by: "name").limit(to: 3)
Objective-C
[[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
Python
Python
(Async)
C++
cities_ref.OrderBy("name").Limit(3);
Node.js
Go
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.
Einheit
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Ruby
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
citiesRef.order(by: "name", descending: true).limit(to: 3)
Objective-C
[[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
Python
Python
(Async)
C++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
Go
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.
Einheit
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Ruby
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
citiesRef .order(by: "state") .order(by: "population", descending: true)
Objective-C
[[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
Python
Python
(Async)
C++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
Go
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.
Einheit
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Ruby
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
citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population") .limit(to: 2)
Objective-C
[[[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
Python
Python
(Async)
C++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population") .Limit(2);
Node.js
Go
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.
Einheit
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
C#
Ruby
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:
- Eine
orderBy()
-Klausel filtert auch das Vorhandensein der angegebenen Felder. Das Ergebnis enthält keine Dokumente, die die angegebenen Felder nicht enthalten.
orderBy
und Existenz
Wenn Sie eine Abfrage nach einem bestimmten Feld sortieren, kann die Abfrage nur das Element Dokumente, in denen das Feld „Sortieren nach“ vorhanden ist.
Die folgende Abfrage würde beispielsweise keine Dokumente zurückgeben, in denen der
Das Feld population
ist nicht festgelegt, auch wenn die Filter ansonsten den Abfragefiltern entsprechen.
Java
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
Ein damit verbundener Effekt bezieht sich auf Ungleichungen. Eine Abfrage mit einem Ungleichheitsfilter
für ein Feld impliziert auch eine Sortierung nach diesem Feld. Die folgenden
gibt die Abfrage keine Dokumente ohne population
-Feld zurück, auch nicht
wenn country = USA
in diesem Dokument . Als Behelfslösung können Sie
separate Abfragen für jede Reihenfolge oder Sie können einen Wert für alle Felder zuweisen.
nach dem Sie sortieren.
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”);