そのために集約パイプラインを使用できます
-
$ lookup
を使用します 2つのコレクションに参加するには、 -
$ unwind
$ lookup
からの結果の配列 ステージ -
$ match
正規表現検索を行うには
regex
を実行する必要がある場合 title
で検索 master
の ドキュメントにも、それを$または
に追加できます $ match
のクエリ ステージ、そしてそれを望まない場合は、$またはクエリから削除することを忘れないでください(私はそれを追加しました)。
$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);
さて、私のphpはそれほど素晴らしいものではありませんが、それでも私はあなたのためにクエリを書くことができました。必要に応じてコードを変更・修正してください。
問題は、これを達成する方法についてのアイデアをあなたに与えたことです。お役に立てば幸いです。
編集
並べ替えコード>するには 、および
limit
、 $sort
を使用します および
field_name
を置き換えることを忘れないでください 結果を並べ替える実際のフィールドを使用します。