Sırala

Açıklama

Giriş belgelerini, belirtilen bir veya daha fazla sıralama düzenine göre sıralar.

Örnekler

Web

const results = await execute(db.pipeline()
  .collection("books")
  .sort(
    field("release_date").descending(), field("author").ascending()
  )
);
Swift
let results = try await db.pipeline()
  .collection("books")
  .sort([
    Field("release_date").descending(), Field("author").ascending()
  ])
  .execute()

Kotlin

val results = db.pipeline()
    .collection("books")
    .sort(
        field("release_date").descending(),
        field("author").ascending()
    )
    .execute()

Java

Task<Pipeline.Snapshot> results = db.pipeline()
    .collection("books")
    .sort(
        field("release_date").descending(),
        field("author").ascending()
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

results = (
    client.pipeline()
    .collection("books")
    .sort(Field.of("release_date").descending(), Field.of("author").ascending())
    .execute()
)
Java
Pipeline.Snapshot results =
    firestore
        .pipeline()
        .collection("books")
        .sort(descending(field("release_date")), ascending(field("author")))
        .execute()
        .get();
Go
snapshot := client.Pipeline().
	Collection("books").
	Sort(firestore.Orders(
		firestore.Descending(firestore.FieldOf("release_date")),
		firestore.Ascending(firestore.FieldOf("author")),
	)).
	Execute(ctx)

Davranış

Sıralama ölçütü

Sıralama düzeni, Cloud Firestore'nin değer türü sırasını izler.

Sonuçların Deterministik Sırası

Sorguda sort aşaması yoksa döndürülen sonuçların sırası deterministik değildir ve yürütmeler arasında değişiklik gösterebilir. Bir sort aşaması mevcutsa ancak sıralama ifadeleri döndürülen sonuçlar arasında benzersiz bir sıralama oluşturamıyorsa döndürülen sonuçların sıralaması yine de yürütmeler arasında farklılık gösterebilir.

Örneğin, şehirleri country'ye göre aşağıdaki veri kümesine karşı artan sırada sıralama:

{ name: "Los Angeles", state: "CA", country: "USA", population: 3970000 },
{ name: "New York", state: "NY", country: "USA", population: 8530000 }
{ name: "San Francisco", state: "CA", country: "USA", population: 870000 },

veri kümesindeki 3 dokümanın herhangi bir permütasyonunu oluşturabilir. Bunun nedeni, tüm dokümanların aynı country özelliğine sahip olmasıdır. Sonuçların sıralamasını belirlemek için name öğesine bir sıralama düzeni ekleyebilirsiniz:

Node.js

const results = await db.pipeline()
  .collection("/cities")
  .sort(field("country").ascending(), fieldd("__name__").ascending())
  .execute();

Bu durumda, birden fazla belgenin aynı country değerine sahip olması durumunda benzersiz belge adı, eşitliği bozmak için kullanılır. country alanı ile birlikte koleksiyondaki dokümanın benzersiz anahtarını oluşturan diğer tüm alanların, sonuçların belirlenmiş bir sırayla üretilmesi için kullanılabileceğini unutmayın.

Eşdeğer Değerleri Sıralama

Eşdeğer değerler birlikte sıralanır ancak Sonuçların Belirleyici Sırası tartışmasına göre eşdeğer sınıftaki sonuçların sırası belirleyici değildir. Örneğin, şehirleri size'ye göre aşağıdaki veri kümesine karşı artan düzende sıralama:

{ name: "Los Angeles", state: "CA", country: "USA", size: 3970000 },
{ name: "Mexico City", state: null, country: "Mexico", size: 3970000.0 },

Her iki belgede de eşdeğer size değeri 3970000 olduğundan veri kümesindeki 2 belgenin herhangi bir permütasyonunu oluşturabilir.

Birden fazla sıralama aşaması

Sorgu birden fazla sıralama aşaması içerdiğinde sorgu sonuçlarını yalnızca son sıralama aşaması etkiler. Bunun, Core API'deki orderBy ifadesinin davranışından farklı olduğunu unutmayın.

İlk N Öğeyi Sıralama Optimizasyonu

sort sonrasında limit(...) kullanıldığında, ilk n öğeyi sıralama işlemi uygulanabilir. Bu optimizasyon, sıralama aşamasının bellek kullanımını sınırlandırır. Sıralama aşaması, limit(...) tarafından tanımlandığı şekilde, bellekte yalnızca N belge depolayabilir. Bu sayede sıralama, bellek açısından daha verimli hale gelir.

Boş ve eksik değerler

Bir sıralamada belirtilen alan bir dokümanda yoksa değeri null olarak sıralanır. Örneğin, şehirleri aşağıdaki veri kümesine göre artan düzende state'ye göre sıralama:

{ name: "Los Angeles", state: "CA", country: "USA", population: 3970000 },
{ name: "Mexico City", state: null, country: "Mexico", population: 9200000 },
{ name: "New York", state: "NY", country: "USA", population: 8530000 }
{ name: "San Francisco", state: "CA", country: "USA", population: 870000 },
{ name: "Toronto", country: "Canada", population: 2930000 },

"Toronto" dokümanı ve "Mexico City" dokümanı null olarak ve diğer dokümanlardan önce sıralandığında aşağıdaki sonuçlar elde edilir.

{ name: "Toronto", country: "Canada", population: 2930000 },
{ name: "Mexico City", state: null, country: "Mexico", population: 9200000 },
{ name: "Los Angeles", state: "CA", country: "USA", population: 3970000 },
{ name: "San Francisco", state: "CA", country: "USA", population: 870000 },
{ name: "New York", state: "NY", country: "USA", population: 8530000 }