MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Consulta de junção do MongoDb com PHP


Você pode usar o pipeline de agregação para isso
  1. Usar $lookup para juntar as duas coleções,
  2. $unwind o array resultante de $lookup estágio
  3. $match para fazer a pesquisa de regex

Se você precisar fazer o regex pesquise em title de master documento também, você pode adicioná-lo ao seu $or consulta do $match stage, e se você não quiser isso, não se esqueça de remover da consulta $or (eu adicionei).
$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);

Agora, meu php não é tão bom, ainda consegui escrever a consulta para você. Por favor, altere/modifique o código de acordo com sua necessidade.

A coisa é que eu lhe dei a idéia de como conseguir isso. Espero que ajude.

Editar

Para sort e limit , use $sort e $limit estágios de pipeline, adicionei isso em resposta.

Não se esqueça de substituir field_name com o campo real com o qual você deseja classificar o resultado.