MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Requête de jointure MongoDb avec PHP

Vous pouvez utiliser le pipeline d'agrégation pour cela

  1. Utilisez $lookup pour joindre les deux collections,
  2. $unwind le tableau résultant de $lookup scène
  3. $match pour faire la recherche de regex

Si vous avez besoin de faire la regex rechercher sur title de master document également, vous pouvez l'ajouter à votre $or requête du $match étape, et si vous ne le souhaitez pas, n'oubliez pas de supprimer de la requête $or (je l'ai ajouté).

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

Maintenant, mon php n'est pas si génial, j'ai quand même réussi à écrire la requête pour vous. Veuillez changer/modifier le code en fonction de vos besoins.

Le fait est que je vous ai donné l'idée sur la façon d'y parvenir. J'espère que ça aide.

Modifier

Pour sort , et limit , utilisez $sort et $limit étapes du pipeline, j'ai ajouté cela dans la réponse.

N'oubliez pas de remplacer field_name avec le champ réel avec lequel vous souhaitez trier le résultat.