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

Cloud Firestore, bir koleksiyondan hangi belgeleri almak istediğinizi belirtmenizi sağlayan güçlü sorgu işlevi sunar. Bu sorgular, Veri Alma bölümünde açıklandığı gibi get() veya addSnapshotListener() ile de kullanılabilir.

Sipariş ve sınır verileri

Varsayılan olarak, bir sorgu, sorguyu karşılayan tüm dokümanları doküman kimliğine göre artan düzende getirir. orderBy() kullanarak verilerinizin sıralama düzenini belirleyebilir ve limit() kullanarak alınan belge sayısını sınırlayabilirsiniz. limit() belirtirseniz değer sıfırdan büyük veya sıfıra eşit olmalıdır.

Örneğin, aşağıdakileri kullanarak ilk 3 şehri alfabetik olarak sorgulayabilirsiniz:

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+KTX

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 istemcisi yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.

$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 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+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
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 istemcisi yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.

$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 çok alana göre de sıralama yapabilirsiniz. Örneğin, eyalete göre ve her eyalet sıralamasında nüfusa göre azalan düzende:

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+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
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 istemcisi yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.

$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 nüfus eşiğini tanımlar, nüfusa göre artan düzende sıralar ve yalnızca bu 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+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
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 istemcisi yükleme ve oluşturma hakkında daha fazla bilgi için Cloud Firestore İstemci Kitaplıkları'na bakın.

$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ının listesine bakın.

Sınırlamalar

orderBy() ifadeleri için 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 ölçütü alanının bulunduğu belgeleri döndürebilir.

Örneğin, aşağıdaki sorgu, population alanının ayarlanmadığı belgeleri, sorgu filtrelerini diğer şekillerde karşılasa bile 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 bulunan bir sorgu, o alana göre sıralama da anlamına gelir. Aşağıdaki sorgu, söz konusu dokümanda country = USA olsa bile population alanı olmayan dokümanları döndürmez . Geçici bir çözüm olarak, her sipariş işlemi için ayrı sorgular yürütebilir veya sipariş verdiğiniz tüm alanlar için bir değer atayabilirsiniz.

Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));

Yukarıdaki sorgu, eşitsizlikle ilgili örtülü bir sıralamayı içerir ve aşağıdakine eşdeğerdir:

Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);