Cloud Firestore ile veri siparişi verme ve verileri sınırlama

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
Not: Bu ürün, watchOS ve App Clip hedeflerinde kullanılamaz.
citiesRef.order(by: "name").limit(to: 3)
Objective-C
Not: Bu ürün, watchOS ve App Clip hedeflerinde kullanılamaz.
[[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
Query query = cities.orderBy("name").limit(3);
Query query = cities.orderBy("name").limitToLast(3);
Python
cities_ref = db.collection("cities")
query = cities_ref.order_by("name").limit_to_last(2)
results = query.get()

Python

cities_ref = db.collection("cities")
query = cities_ref.order_by("name").limit_to_last(2)
results = await query.get()
C++
cities_ref.OrderBy("name").Limit(3);
Node.js
const firstThreeRes = await citiesRef.orderBy('name').limit(3).get();
Go
query := cities.OrderBy("name", firestore.Asc).Limit(3)
query := cities.OrderBy("name", firestore.Asc).LimitToLast(3)
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.

$query = $citiesRef->orderBy('name')->limit(3);
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Query query = citiesRef.OrderBy("Name").Limit(3);
Ruby
query = cities_ref.order("name").limit(3)

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
Not: Bu ürün, watchOS ve App Clip hedeflerinde kullanılamaz.
citiesRef.order(by: "name", descending: true).limit(to: 3)
Objective-C
Not: Bu ürün, watchOS ve App Clip hedeflerinde kullanılamaz.
[[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
Query query = cities.orderBy("name", Direction.DESCENDING).limit(3);
Python
cities_ref = db.collection("cities")
query = cities_ref.order_by("name", direction=firestore.Query.DESCENDING).limit(3)
results = query.stream()

Python

cities_ref = db.collection("cities")
query = cities_ref.order_by("name", direction=firestore.Query.DESCENDING).limit(3)
results = query.stream()
C++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
const lastThreeRes = await citiesRef.orderBy('name', 'desc').limit(3).get();
Go
query := cities.OrderBy("name", firestore.Desc).Limit(3)
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.

$query = $citiesRef->orderBy('name', 'DESC')->limit(3);
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Query query = citiesRef.OrderByDescending("Name").Limit(3);
Ruby
query = cities_ref.order("name", "desc").limit(3)

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
Not: Bu ürün, watchOS ve App Clip hedeflerinde kullanılamaz.
citiesRef
  .order(by: "state")
  .order(by: "population", descending: true)
Objective-C
Not: Bu ürün, watchOS ve App Clip hedeflerinde kullanılamaz.
[[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
Query query = cities.orderBy("state").orderBy("population", Direction.DESCENDING);
Python
cities_ref = db.collection("cities")
ordered_city_ref = cities_ref.order_by("state").order_by(
    "population", direction=firestore.Query.DESCENDING
)

Python

cities_ref = db.collection("cities")
cities_ref.order_by("state").order_by(
    "population", direction=firestore.Query.DESCENDING
)
C++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
const byStateByPopRes = await citiesRef.orderBy('state').orderBy('population', 'desc').get();
Go
query := client.Collection("cities").OrderBy("state", firestore.Asc).OrderBy("population", firestore.Desc)
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.

$query = $citiesRef->orderBy('state')->orderBy('population', 'DESC');
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
Ruby
query = cities_ref.order("state").order("population", "desc")

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
Not: Bu ürün, watchOS ve App Clip hedeflerinde kullanılamaz.
citiesRef
  .whereField("population", isGreaterThan: 100000)
  .order(by: "population")
  .limit(to: 2)
Objective-C
Not: Bu ürün, watchOS ve App Clip hedeflerinde kullanılamaz.
[[[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
Query query = cities.whereGreaterThan("population", 2500000L).orderBy("population").limit(2);
Python
cities_ref = db.collection("cities")
query = (
    cities_ref.where(filter=FieldFilter("population", ">", 2500000))
    .order_by("population")
    .limit(2)
)
results = query.stream()

Python

cities_ref = db.collection("cities")
query = (
    cities_ref.where(filter=FieldFilter("population", ">", 2500000))
    .order_by("population")
    .limit(2)
)
results = query.stream()
C++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000))
    .OrderBy("population")
    .Limit(2);
Node.js
const biggestRes = await citiesRef.where('population', '>', 2500000)
  .orderBy('population').limit(2).get();
Go
query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Desc).Limit(2)
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.

$query = $citiesRef
    ->where('population', '>', 2500000)
    ->orderBy('population')
    ->limit(2);
Unity
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
C#
Query query = citiesRef
    .WhereGreaterThan("Population", 2500000)
    .OrderBy("Population")
    .Limit(2);
Ruby
query = cities_ref.where("population", ">", 2_500_000).order("population").limit(2)

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 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);