Cloud Firestore ile verileri sipariş edin ve sınırlandırın

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
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.
citiesRef.order(by: "name").limit(to: 3)
Amaç-C
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.
[[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();
Gitmek
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ı'na bakın.

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

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
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.
citiesRef.order(by: "name", descending: true).limit(to: 3)
Amaç-C
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.
[[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();
Gitmek
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ı'na bakın.

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

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
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.
citiesRef
  .order(by: "state")
  .order(by: "population", descending: true)
Amaç-C
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.
[[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")
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();
Gitmek
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ı'na bakın.

$query = $citiesRef->orderBy('state')->orderBy('population', 'DESC');
Birlik
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
Yakut
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 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
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.
citiesRef
  .whereField("population", isGreaterThan: 100000)
  .order(by: "population")
  .limit(to: 2)
Amaç-C
Not: Bu ürün watchOS ve App Clip hedeflerinde mevcut değildir.
[[[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();
Gitmek
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ı'na bakın.

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

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ı alanda

    Web 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
    cities_ref = db.collection("cities")
    query = cities_ref.where(filter=FieldFilter("population", ">", 2500000)).order_by(
        "population"
    )
    results = query.stream()

    Python

    cities_ref = db.collection("cities")
    query = cities_ref.where(filter=FieldFilter("population", ">", 2500000)).order_by(
        "population"
    )
    results = query.stream()
    Node.js
    citiesRef.where('population', '>', 2500000).orderBy('population');
    Gitmek
    query := cities.Where("population", ">", 2500000).OrderBy("population", firestore.Asc)
    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.

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

    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
    Query query = cities.whereGreaterThan("population", 2500000L).orderBy("country");
    Python
    cities_ref = db.collection("cities")
    query = cities_ref.where(filter=FieldFilter("population", ">", 2500000)).order_by(
        "country"
    )
    results = query.stream()

    Python

    cities_ref = db.collection("cities")
    query = cities_ref.where(filter=FieldFilter("population", ">", 2500000)).order_by(
        "country"
    )
    results = query.stream()
    C++
    // BAD EXAMPLE -- will crash the program:
    cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000))
        .OrderBy("country");
    Node.js
    citiesRef.where('population', '>', 2500000).orderBy('country');
    Gitmek
    // Note: This is an invalid query. It violates the constraint that range
    // and order by are required to be on the same field.
    query := cities.Where("population", ">", 2500000).OrderBy("country", firestore.Asc)
    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.

    $invalidRangeQuery = $citiesRef
        ->where('population', '>', 2500000)
        ->orderBy('country');
    Birlik
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Country");
    C#
    Query query = citiesRef
        .WhereGreaterThan("Population", 2500000)
        .OrderBy("Country");
    Yakut
    query = cities_ref.where("population", ">", 2_500_000).order("country")

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