Sırala

Açıklama

Giriş dokümanlarını, 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();

Davranış

Sıralama düzeni

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

Sonuçların Belirleyici Sırası

Sorguda sort aşaması yoksa döndürülen sonuçların sıralaması belirsizdir 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 deterministik 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, art arda 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 Sıralama Optimizasyonu

sort sonrasında limit(...) kullanıldığında ilk n'ye göre sıralama kullanılabilir. 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, bir seferde yalnızca N belge depolayabilir. Bu sayede sıralama daha bellek açısından 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 }