Cloud Firestore, bir koleksiyondan hangi belgeleri almak istediğinizi belirtmek için güçlü bir sorgu işlevi sağlar. Bu sorgular, Veri Alma bölümünde açıklandığı gibi get()
veya addSnapshotListener()
ile de kullanılabilir.
Verileri sıralama ve sınırlama
Varsayılan olarak, bir sorgu, sorguyu karşılayan tüm dokümanları doküman kimliğine göre artan sırada alır. orderBy()
kullanarak verilerinizin sıralama düzenini belirtebilir ve limit()
kullanarak alınan doküman sayısını sınırlayabilirsiniz. limit()
belirtirseniz değer sıfıra eşit veya sıfırdan büyük olmalıdır.
Örneğin, alfabetik sıraya göre ilk 3 şehri sorgulamak için şu sorguyu kullanabilirsiniz:
Web
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
Web
citiesRef.orderBy("name").limit(3);
Swift
citiesRef.order(by: "name").limit(to: 3)
Objective-C
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];
Kotlin
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
Go
PHP
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları başlıklı makaleyi inceleyin.
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Ruby
Son 3 şehri görmek için azalan düzende de sıralayabilirsiniz:
Web
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name", "desc"), limit(3));
Web
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
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
Go
PHP
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları başlıklı makaleyi inceleyin.
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Ruby
Birden fazla alana göre de sıralama yapabilirsiniz. Örneğin, eyalete göre sıralamak ve her eyalette nüfusa göre azalan sırada sıralamak istiyorsanız:
Web
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
Web
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
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
Go
PHP
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları başlıklı makaleyi inceleyin.
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Ruby
where()
filtrelerini orderBy()
ve limit()
ile birleştirebilirsiniz. Aşağıdaki örnekte, sorgular bir popülasyon eşiği tanımlar, popülasyona göre artan sırada sıralama yapar ve yalnızca eşiği aşan ilk birkaç sonucu döndürür:
Web
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
Web
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
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
Go
PHP
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları başlıklı makaleyi inceleyin.
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
C#
Ruby
Ancak, aralık karşılaştırması (<
, <=
, >
, >=
) içeren bir filtreniz varsa ilk sıralamanız aynı alanda olmalıdır. Aşağıdaki orderBy()
sınırlamaları listesine bakın.
Sınırlamalar
orderBy()
maddeleriyle ilgili aşağıdaki kısıtlamaya dikkat edin:
orderBy()
ifadesi, belirtilen alanların varlığına göre de filtreleme yapar. Sonuç kümesi, belirtilen alanları içermeyen dokümanları içermez.
orderBy
ve varlık
Bir sorguyu belirli bir alana göre sıraladığınızda sorgu, yalnızca sıralama alanının bulunduğu dokümanları döndürebilir.
Örneğin, aşağıdaki sorgu, population
alanı ayarlanmamış dokümanları, sorgu filtrelerini karşılasalar bile döndürmez.
Java
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
Benzer bir etki eşitsizlikler için de geçerlidir. Bir alanda eşitsizlik filtresi içeren bir sorgu, bu alana göre sıralamayı da ifade eder. Aşağıdaki sorgu, dokümanda country = USA
olsa bile population
alanı olmayan dokümanları döndürmez . Geçici çözüm olarak, her sıralama için ayrı sorgular yürütebilir veya sıralama yaptığınız tüm alanlara bir değer atayabilirsiniz.
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));
Yukarıdaki sorgu, eşitsizlik üzerinde örtülü bir order-by içerir ve aşağıdakine eşdeğerdir:
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);