MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDb Unisciti alla query con PHP

Puoi utilizzare la pipeline di aggregazione per questo

  1. Usa $lookup per unire le due raccolte,
  2. $unwind l'array risultante da $lookup fase
  3. $match per eseguire la ricerca dell'espressione regolare

Se hai bisogno di fare la regex cerca su title di master documento, puoi aggiungerlo al tuo $or interrogazione del $match stage e, se non lo desideri, non dimenticare di rimuovere dalla query $or (l'ho aggiunto).

$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);

Ora, il mio php non è eccezionale, sono comunque riuscito a scrivere la query per te. Si prega di modificare/modificare il codice in base alle proprie esigenze.

Il fatto è che ti ho dato l'idea su come raggiungere questo obiettivo. Spero di esserti stato d'aiuto.

Modifica

Per sort e limit , usa $sort e $limit fasi della pipeline, l'ho aggiunto in risposta.

Non dimenticare di sostituire field_name con il campo effettivo con cui vuoi ordinare il risultato.