Gå til indhold

Forespørgselsbygger

DocStore og SegmentedLog stiller query() til rådighed. DocStore kan bruge sekundære indekser; SegmentedLog anvender de samme betingelser på streamede poster.

PHP
$records = $docs
    ->query()
    ->where('kind')->eq('page')
    ->where('status')->in(['draft', 'published'])
    ->where('publishedAt')->between($from, $until)
    ->orderBy('publishedAt', 'desc')
    ->limit(50)
    ->get();

Nyttige terminalmetoder:

PHP
$docs->query()->where('slug')->eq('home')->first();
$docs->query()->where('kind')->eq('page')->count();
$docs->query()->cursor($lastId)->page(100)->get();
$docs->query()->where('slug')->eq('home')->explain();

På DocStore kan to eq-betingelser på ikke-unikke felter med lighedsindeks bruge en automatisk sammensat bucket. Enkelt lighed, in og intervaloperatorer fortsætter med at bruge deres konfigurerede feltindekser.

Operatorer:

  • eq, neq
  • in, notIn
  • gt, gte, lt, lte, between
  • exists, missing
  • prefix
  • andWhere, orWhere
  • orderBy, limit, cursor, page

andWhere og orWhere bruger callbacks, fordi and og or er reserverede PHP-nøgleord:

PHP
$docs->query()
    ->where('kind')->eq('page')
    ->orWhere(fn ($q) => $q->where('kind')->eq('post')->where('featured')->eq(true))
    ->get();

Kædede where()-kald kombineres med AND; hver orWhere()-gren tilføjer et alternativ.

Sådan udføres forespørgsler

Alle betingelser virker på alle samlinger; indekser ændrer kun omkostningen. På DocStore løses eq og in via lighedsindekser, intervaloperatorerne og prefix løses via intervalindekser, og orderBy med limit på et felt med intervalindeks læser i indeksrækkefølge. Alt andet filtrerer en postscanning. orderBy på et felt, som planlæggeren ikke kan hente fra et indeks, sorterer de matchende poster i PHP, så brug den sammen med indekserede betingelser i store samlinger. count() bruger antal indeksindgange på DocStore og tællere i hukommelsen på SegmentedLog, når filteret er en enkelt lighed.

cursor($id) begrænser resultaterne til poster efter id'et og kan kombineres med page() for stabil sideinddeling sorteret efter post-id. Se Forespørgsler for almindelige streamingfiltre uden forespørgselsbyggeren.