Hoppa till innehåll

Frågebyggare

DocStore och SegmentedLog exponerar query(). DocStore kan använda sekundära index; SegmentedLog tillämpar samma predikat på strömmade 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();

Användbara 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 två eq-villkor för icke-unika likhetsindexerade fält använda en automatisk sammansatt hink. Enkel likhet, in och intervalloperatorer fortsätter att använda sina konfigurerade fältindex.

Operatorer:

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

andWhere och orWhere använder återanrop eftersom and och or är reserverade PHP-nyckelord:

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

Kedjade anrop till where() kombineras med AND; varje orWhere()-gren lägger till ett alternativ.

Så här körs det

Varje villkor fungerar för varje samling; index påverkar bara kostnaden. På DocStore går eq och in via likhetsindex, intervalloperatorerna och prefix går via intervallindex, och orderBy med limit på ett intervallindexerat fält läser i indexordning. Allt annat filtrerar en postskanning. orderBy på ett fält som frågeplaneraren inte kan hantera med ett index sorterar de matchande posterna i PHP, så kombinera det med indexerade villkor för stora samlingar. count() använder antalet indexposter på DocStore och räknare i minnet på SegmentedLog när filtret är en enda likhet.

cursor($id) begränsar resultaten till poster efter id:t, vilket kombineras med page() för stabil sidnumrering sorterad efter post-id. För vanliga strömningsfilter utan byggaren, se Frågor.