使用查询游标将数据分页

通过在 Cloud Firestore 中使用查询游标,您可以根据在查询中定义的参数将返回的数据分成多个批次。

查询游标定义了查询的起点和终点,并让您可以:

  • 返回数据的子集。
  • 将查询结果分页。

但是,如需为查询定义特定的范围,您应该使用 where() 方法(具体说明请参阅简单查询)。

向查询中添加简单游标

使用 startAt() 或 startAfter() 方法定义查询的起点。startAt() 方法包含起点,而 startAfter() 方法则不包含起点。

例如,如果您在查询中使用 startAt(A),该查询会返回整个字母表。如果您改为使用 startAfter(A),则该查询会返回 B-Z。

Web

import { query, orderBy, startAt } from "firebase/firestore";

const q = query(citiesRef, orderBy("population"), startAt(1000000));

order_and_start.js

Web

citiesRef.orderBy("population").startAt(1000000);

test.firestore.js
Swift

注意:此产品不适用于 watchOS 和 App Clip 目标。

// Get all cities with population over one million, ordered by population.
db.collection("cities")
  .order(by: "population")
  .start(at: [1000000])

ViewController.swift
Objective-C

注意:此产品不适用于 watchOS 和 App Clip 目标。

// Get all cities with population over one million, ordered by population.
[[[db collectionWithPath:@"cities"]
    queryOrderedByField:@"population"]
    queryStartingAtValues:@[ @1000000 ]];

ViewController.m

Kotlin

// Get all cities with a population >= 1,000,000, ordered by population,
db.collection("cities")
    .orderBy("population")
    .startAt(1000000)

DocSnippets.kt

Java

// Get all cities with a population >= 1,000,000, ordered by population,
db.collection("cities")
        .orderBy("population")
        .startAt(1000000);

DocSnippets.java

Dart

db.collection("cities").orderBy("population").startAt([1000000]);

firestore.dart
Java
Query query = cities.orderBy("population").startAt(4921000L);

QueryDataSnippets.java
Python
cities_ref = db.collection("cities")
query_start_at = cities_ref.order_by("population").start_at({"population": 1000000})

snippets.py

Python

cities_ref = db.collection("cities")
query_start_at = cities_ref.order_by("population").start_at({"population": 1000000})

snippets.py
C++
// Get all cities with a population >= 1,000,000, ordered by population,
db->Collection("cities")
    .OrderBy("population")
    .StartAt({FieldValue::Integer(1000000)});

snippets.cpp
Node.js
const startAtRes = await db.collection('cities')
  .orderBy('population')
  .startAt(1000000)
  .get();

index.js
Go
query := client.Collection("cities").OrderBy("population", firestore.Asc).StartAt(1000000)

query.go
PHP

PHP

如需详细了解如何安装和创建 Cloud Firestore 客户端,请参阅 Cloud Firestore 客户端库。

$query = $citiesRef
    ->orderBy('population')
    ->startAt([1000000]);

query_cursor_start_at_field_value_single.php