Přejít k obsahu

Tvůrce dotazů

DocStore a SegmentedLog zpřístupňují query(). DocStore může využívat sekundární indexy; SegmentedLog používá stejné predikáty nad streamovanými 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žitečné koncové metody:

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

Na DocStore mohou dvě podmínky eq nad neunikátními poli indexovanými pro rovnost využít automatický složený segment. Jednoduchá rovnost, in a operátory rozsahu nadále 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í zpětná volání, protože and a or jsou vyhrazená klíčová slova PHP:

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

Zřetězená volání where() se kombinují pomocí AND; každá větev orWhere() přidává alternativu.

Jak se provádějí

Každá podmínka funguje nad každou kolekcí; indexy mění pouze náročnost. Na DocStore se eq a in vyhodnocují pomocí indexů rovnosti, operátory rozsahu a prefix pomocí indexů rozsahu a orderBy s limit nad polem indexovaným podle rozsahu čte v pořadí indexu. Vše ostatní filtruje procházené záznamy. orderBy nad polem, které plánovač nedokáže obsloužit indexem, řadí odpovídající záznamy v PHP; u velkých kolekcí ho proto kombinujte s podmínkami využívajícími index. count() používá počty položek indexu na DocStore a čítače v paměti na SegmentedLog, pokud filtr obsahuje jedinou podmínku rovnosti.

cursor($id) omezuje výsledky na záznamy následující po daném ID a v kombinaci s page() umožňuje stabilní stránkování seřazené podle ID záznamu. Streamovací filtry bez tvůrce dotazů najdete v části Dotazy.