K tomu můžete použít agregační kanál
- Použijte
$lookup
připojit se ke dvěma sbírkám, $unwind
výsledné pole z$lookup
etapa$match
k vyhledání regulárního výrazu
Pokud potřebujete provést regex
hledat podle title
z master
dokument, můžete jej přidat do $or
dotaz na $match
fázi, a pokud to nechcete, nezapomeňte odstranit z dotazu $or (přidal jsem to).
$pipeline = array(
array(
'$lookup' => array(
'from' => 'masters',
'localField' => '$master_id',
'foreignField' => '$_id',
'as' => 'master'
)
),
array(
'$unwind' => Array(
'path' => '$master',
'preserveNullAndEmptyArrays' => true
)
),
array(
'$match' => array(
'$or' => array(
array(
'title' => new \MongoDB\BSON\Regex($queryString),
),
array(
'description' => new \MongoDB\BSON\Regex($queryString),
),
array(
'master.title' => new \MongoDB\BSON\Regex($queryString),
),
)
)
),
array(
'$sort' => array(
'field_name' => 1
)
),
array(
'$limit' => 10
)
)
$results = $details->aggregate($pipeline);
Nyní můj php není tak skvělý, přesto se mi podařilo napsat dotaz pro vás. Změňte/upravte kód podle svých potřeb.
Jde o to, že jsem ti dal nápad, jak toho dosáhnout. Doufám, že to pomůže.
Upravit
Chcete-li sort
a limit
, použijte $sort
a $limit
fáze potrubí, přidal jsem to v odpovědi.
Nezapomeňte nahradit field_name
se skutečným polem, podle kterého chcete výsledek seřadit.