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
citiesRef.order(by: "name").limit(to: 3)
Ziel c
[[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
Python
Python
C++
cities_ref.OrderBy("name").Limit(3);
Node.js
Gehen
PHP
PHP
Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .
Einheit
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Rubin
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
citiesRef.order(by: "name", descending: true).limit(to: 3)
Ziel c
[[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
Python
Python
C++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
Gehen
PHP
PHP
Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .
Einheit
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Rubin
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
citiesRef .order(by: "state") .order(by: "population", descending: true)
Ziel c
[[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
Python
Python
C++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
Gehen
PHP
PHP
Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .
Einheit
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Rubin
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
citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population") .limit(to: 2)
Ziel c
[[[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
Python
Python
C++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population") .Limit(2);
Node.js
Gehen
PHP
PHP
Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .
Einheit
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
C#
Rubin
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 FeldWeb 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
Python
Node.js
Gehen
PHP
PHP
Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .
Einheit
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population");
C#
Rubin
Ungültig : Bereichsfilter und erstes
orderBy
für verschiedene FelderWeb 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
Python
Python
C++
// BAD EXAMPLE -- will crash the program: cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("country");
Node.js
Gehen
PHP
PHP
Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .
Einheit
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Country");
C#
Rubin
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”);