Vaicājumu veidotājs
DocStore un SegmentedLog nodrošina query(). DocStore var izmantot sekundāros indeksus; SegmentedLog piemēro tos pašus nosacījumus straumētiem ierakstiem.
$records = $docs
->query()
->where('kind')->eq('page')
->where('status')->in(['draft', 'published'])
->where('publishedAt')->between($from, $until)
->orderBy('publishedAt', 'desc')
->limit(50)
->get();
Noderīgas termināļa metodes:
$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();
DocStore gadījumā divus eq nosacījumus laukiem ar vienādības indeksu, kas nav unikāli, var apstrādāt ar automātisku saliktu kopu. Atsevišķa vienādība, in un diapazona operatori turpina izmantot konfigurētos lauku indeksus.
Operatori:
eq,neqin,notIngt,gte,lt,lte,betweenexists,missingprefixandWhere,orWhereorderBy,limit,cursor,page
andWhere un orWhere izmanto atzvanīšanas funkcijas, jo and un or ir rezervēti PHP atslēgvārdi:
$docs->query()
->where('kind')->eq('page')
->orWhere(fn ($q) => $q->where('kind')->eq('post')->where('featured')->eq(true))
->get();
Ķēdē savienoti where() izsaukumi tiek apvienoti ar AND; katrs orWhere() atzars pievieno alternatīvu.
Kā notiek izpilde
Katrs nosacījums darbojas ar katru kolekciju; indeksi maina tikai izmaksas.
DocStore gadījumā eq un in izmanto vienādības indeksus, diapazona operatori un prefix — diapazona indeksus, bet orderBy ar limit laukā, kuram ir diapazona indekss, nolasa ierakstus indeksa secībā. Pārējos gadījumos tiek skenēti un filtrēti ieraksti. Ja lauka orderBy plānotājs nevar apstrādāt, izmantojot indeksu, atrastie ieraksti tiek sakārtoti PHP vidē, tāpēc lielās kolekcijās apvienojiet to ar indeksētiem nosacījumiem. Ja filtrs ir viena vienādība, count() izmanto indeksu ierakstu skaitu DocStore kolekcijās un atmiņā uzturētus skaitītājus SegmentedLog kolekcijās.
cursor($id) ierobežo rezultātus, iekļaujot tikai ierakstus pēc norādītā ID. Apvienojiet to ar page(), lai nodrošinātu stabilu lapošanu pēc ierakstu ID. Vienkāršus straumēšanas filtrus bez veidotāja skatiet sadaļā Vaicājumi.