MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDb Join-Abfrage mit PHP

Sie können dafür die Aggregationspipeline verwenden

  1. Verwenden Sie $lookup um die beiden Sammlungen zu verbinden,
  2. $unwind das resultierende Array von $lookup Stufe
  3. $match um die Regex-Suche durchzuführen

Wenn Sie den regex ausführen müssen Suche nach title von master Dokument ebenfalls, Sie können dies zu Ihrem $or hinzufügen Abfrage des $match Stufe, und wenn Sie das nicht wollen, vergessen Sie nicht, es aus der $or-Abfrage zu entfernen (ich habe es hinzugefügt).

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

Nun, mein PHP ist nicht so toll, trotzdem habe ich es geschafft, die Abfrage für Sie zu schreiben. Bitte ändern/modifizieren Sie den Code nach Bedarf.

Die Sache ist, dass ich Ihnen die Idee gegeben habe, wie Sie dies erreichen können. Hoffe das hilft.

Bearbeiten

Zum sort , und limit , verwenden Sie $sort und $limit Pipeline-Stufen, das habe ich als Antwort hinzugefügt.

Vergessen Sie nicht, field_name zu ersetzen mit dem tatsächlichen Feld, nach dem Sie das Ergebnis sortieren möchten.