Cloud Firestore, bir koleksiyondan hangi dokümanları 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 düzende getirir. orderBy()
parametresini kullanarak verilerinizin sıralama düzenini belirtebilir ve limit()
parametresini kullanarak alınan doküman sayısını sınırlayabilirsiniz. limit()
belirtirseniz değer sıfır veya sıfırdan büyük olmalıdır.
Örneğin, alfabetik olarak ilk 3 şehri şu şekilde sorgulayabilirsiniz:
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+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
Go
PHP
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore istemci 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+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
Go
PHP
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore istemci kitaplıkları başlıklı makaleyi inceleyin.
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Ruby
Ayrıca birden fazla alana göre de sıralama yapabilirsiniz. Örneğin, eyalete göre ve her eyalette nüfusa göre azalan düzende sıralama yapmak 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+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
Go
PHP
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore istemci 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 düzende sıralar 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+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
Go
PHP
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore istemci 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ına göz atın.
Sınırlamalar
orderBy()
yan tümceleri için aşağıdaki kısıtlamaya dikkat edin:
orderBy()
yan tümcesi, belirtilen alanların varlığını da filtreler. 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 ölçütü alanının bulunduğu dokümanları döndürebilir.
Örneğin, aşağıdaki sorgu, sorgu filtrelerini karşılıyor olsalar bile population
alanının ayarlanmadığı dokümanları döndürmez.
Java
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
Eşitsizlikler için de benzer bir etki geçerlidir. Bir alanda eşitsizlik filtresi içeren bir sorgu, söz konusu alana göre sıralama yapılmasını da ifade eder. Aşağıdaki sorgu, country = USA
alanı olsa bile population
alanı olmayan dokümanları döndürmez . Geçici bir çö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şitsizlikte ima edilen bir sıralama içerir ve aşağıdakiyle eşdeğerdir:
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);