Preskočiť na obsah

Zostavovač dotazov

DocStore a SegmentedLog sprístupňujú query(). DocStore dokáže používať sekundárne indexy; SegmentedLog uplatňuje rovnaké predikáty na streamované záznamy.

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

Užitočné terminálové metódy:

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

V DocStore môžu dve podmienky eq na poliach s indexom rovnosti, ktoré nie sú jedinečné, používať automatický zložený blok. Jednoduchá rovnosť, in a operátory rozsahu naďalej používajú nakonfigurované indexy polí.

Operátory:

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

andWhere a orWhere používajú spätné volania, pretože and a or sú vyhradené kľúčové slová PHP:

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

Zreťazené volania where() sa kombinujú pomocou AND; každá vetva orWhere() pridáva ďalšiu možnosť.

Ako sa vykonávajú operácie

Každá podmienka funguje v každej kolekcii; indexy menia iba náklady. V DocStore sa eq a in vyhodnocujú pomocou indexov rovnosti, operátory rozsahu a prefix pomocou rozsahových indexov a orderBy s limit na poli s rozsahovým indexom číta v poradí indexu. Všetko ostatné filtruje skenovanie záznamov. orderBy na poli, ktoré plánovač nedokáže spracovať pomocou indexu, zoradí zodpovedajúce záznamy v PHP, preto pri veľkých kolekciách používajte túto operáciu spolu s indexovanými podmienkami. count() používa počty položiek indexu v DocStore a počítadlá v pamäti v SegmentedLog, keď filter predstavuje jednu rovnosť.

cursor($id) obmedzí výsledky na záznamy po danom ID. V kombinácii s page() umožňuje stabilné stránkovanie zoradené podľa ID záznamu. O filtroch určených na obyčajné streamovanie bez zostavovača sa dočítate v časti Dotazy.