Cloud Firestore, bir koleksiyondan hangi belgeleri almak istediğinizi belirlemek için güçlü sorgu işlevselliği sağlar. Bu sorgular, Get Data bölümünde açıklandığı gibi get()
veya addSnapshotListener()
ile de kullanılabilir.
Verileri sipariş etme ve sınırlama
Varsayılan olarak bir sorgu, sorguyu karşılayan tüm belgeleri belge kimliğine göre artan sırada alır. orderBy()
kullanarak verilerinizin sıralama düzenini belirtebilir ve limit()
kullanarak alınan belge sayısını sınırlayabilirsiniz. Bir limit()
belirtirseniz değerin sıfırdan büyük veya sıfıra eşit olması gerekir.
Örneğin, ilk 3 şehri alfabetik olarak şu şekilde sorgulayabilirsiniz:
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);
Süratli
citiesRef.order(by: "name").limit(to: 3)
Amaç-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
Gitmek
PHP
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.
Birlik
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Yakut
Ayrıca son 3 şehri elde etmek için azalan düzende de sıralama yapabilirsiniz:
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);
Süratli
citiesRef.order(by: "name", descending: true).limit(to: 3)
Amaç-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
Gitmek
PHP
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.
Birlik
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Yakut
Ayrıca birden fazla alana göre sipariş verebilirsiniz. Örneğin, eyalete göre ve her eyalette nüfusa göre azalan sırada sıralama yapmak istiyorsanız:
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");
Süratli
citiesRef .order(by: "state") .order(by: "population", descending: true)
Amaç-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
Gitmek
PHP
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.
Birlik
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Yakut
where()
filtrelerini orderBy()
ve limit()
ile birleştirebilirsiniz. Aşağıdaki örnekte, sorgular bir nüfus eşiğini tanımlar, nüfusa göre artan düzende sıralar ve yalnızca eşiği aşan ilk birkaç sonucu döndürür:
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);
Süratli
citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population") .limit(to: 2)
Amaç-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
Gitmek
PHP
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.
Birlik
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
C#
Yakut
Ancak, aralık karşılaştırmalı ( <
, <=
, >
, >=
) 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()
cümleleri için aşağıdaki kısıtlamalara dikkat edin:
- Bir
orderBy()
cümlesi aynı zamanda verilen alanların varlığını da filtreler . Sonuç kümesi, verilen alanları içermeyen belgeleri içermeyecektir. Aralık karşılaştırmalı bir filtre eklerseniz (
<
,<=
,>
,>=
), ilk sıralamanız aynı alanda olmalıdır:Geçerli : Aralık filtresi ve
orderBy
aynı alandaWeb 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");
Süratli
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population")
Amaç-C
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.[[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
Gitmek
PHP
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.
Birlik
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population");
C#
Yakut
Geçersiz : Aralık filtresi ve farklı alanlardaki ilk
orderBy
Web 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");
Süratli
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "country")
Amaç-C
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.[[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
Gitmek
PHP
PHP
Cloud Firestore istemcisini yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.
Birlik
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Country");
C#
Yakut
orderBy
ve varoluş
Bir sorguyu belirli bir alana göre sıraladığınızda, sorgu yalnızca sıralama alanının mevcut olduğu belgeleri döndürebilir.
Örneğin, aşağıdaki sorgu, sorgu filtrelerini karşılasa bile, population
alanının ayarlanmadığı hiçbir belgeyi döndürmez.
Java
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
İlgili bir etki eşitsizlikler için de geçerlidir. Bir alanda eşitsizlik filtresi bulunan bir sorgu aynı zamanda o alana göre sıralama anlamına da gelir. Aşağıdaki sorgu, o belgede country = USA
olsa bile population
alanı olmayan belgeleri döndürmez. Geçici bir çözüm olarak, her sıralama için ayrı sorgular çalıştırabilir veya sıralama yaptığınız tüm alanlar için bir değer atayabilirsiniz.
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));
Yukarıdaki sorgu eşitsizliğe ilişkin örtülü bir sıralama içerir ve aşağıdakine eşdeğerdir:
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);