了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

Cloud Firestore ile verileri sipariş edin ve sınırlayın

Cloud Firestore, bir koleksiyondan hangi belgeleri almak istediğinizi belirtmek için güçlü sorgu işlevi sağlar. Bu sorgular, Get Data içinde açıklandığı gibi get() veya addSnapshotListener() ile de kullanılabilir.

Sipariş ve sınır verileri

Varsayılan olarak, bir sorgu, belge kimliğine göre artan sırada sorguyu karşılayan tüm belgeleri alır. orderBy() kullanarak verileriniz için sıralama düzenini belirtebilir ve limit() kullanarak alınan belge sayısını sınırlayabilirsiniz. Bir limit() belirtirseniz, değer sıfırdan büyük veya sıfıra eşit olmalıdır.

Ö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);
Piton
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 istemcisi kurma ve oluşturma hakkında daha fazla bilgi için Cloud Firestore Client Libraries bölümüne 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)

Son 3 şehri almak için azalan düzende de sıralayabilirsiniz:

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);
Piton
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 istemcisi kurma ve oluşturma hakkında daha fazla bilgi için Cloud Firestore Client Libraries bölümüne 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 eyalet içinde nüfusa göre azalan düzende sıralamak 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);
Piton
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 istemcisi kurma ve oluşturma hakkında daha fazla bilgi için Cloud Firestore Client Libraries bölümüne 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 popülasyon eşiği tanımlar, popülasyona 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);
Piton
cities_ref = db.collection('cities')
query = cities_ref.where(
    'population', '>', 2500000).order_by('population').limit(2)
results = query.stream()

Python

cities_ref = db.collection("cities")
query = cities_ref.where("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 istemcisi kurma ve oluşturma hakkında daha fazla bilgi için Cloud Firestore Client Libraries bölümüne 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() yan tümceleri için aşağıdaki kısıtlamalara dikkat edin:

  • Bir orderBy() yan tümcesi ayrıca verilen alanların varlığını da filtreler . Sonuç kümesi, verilen alanları içermeyen belgeleri içermez.
  • Aralık karşılaştırmalı ( < , <= , > , >= ) bir filtre eklerseniz, ilk sıralamanız aynı alanda olmalıdır:

    Geçerli : Aralık filtresi ve aynı alanda orderBy

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

    Python

    cities_ref = db.collection("cities")
    query = cities_ref.where("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 istemcisi kurma ve oluşturma hakkında daha fazla bilgi için Cloud Firestore Client Libraries bölümüne 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ı alanlarda 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");
    Piton
    cities_ref = db.collection('cities')
    query = cities_ref.where('population', '>', 2500000).order_by('country')
    results = query.stream()

    Python

    cities_ref = db.collection("cities")
    query = cities_ref.where("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 istemcisi kurma ve oluşturma hakkında daha fazla bilgi için Cloud Firestore Client Libraries bölümüne 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")
  • Sorgunuzu bir eşitlik ( = ) veya in tümcede yer alan herhangi bir alana göre sıralayamazsınız.

orderBy ve varoluş

Bir sorguyu belirli bir alana göre sipariş ettiğinizde, sorgu yalnızca siparişe göre alanın bulunduğu belgeleri döndürebilir.

Örneğin, aşağıdaki sorgu, population alanı ayarlanmamışsa, sorgu filtrelerini karşılasalar bile herhangi bir belge döndürmez.

java
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);

İlgili bir etki eşitsizlikler için geçerlidir. Bir alanda eşitsizlik filtresi olan bir sorgu, o alana göre sıralamayı da gerektirir. Aşağıdaki sorgu, o belgede country = USA olsa bile population alanı olmayan belgeleri döndürmez. Geçici bir çözüm olarak, her sipariş için ayrı sorgular yürütebilir veya sipariş ettiğ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şitsizlik üzerinde zımni 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”);