sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDb Consulta de unión con PHP

Puede usar canalización de agregación para eso

  1. Usar $lookup para unir las dos colecciones,
  2. $unwind la matriz resultante de $lookup etapa
  3. $match para hacer la búsqueda de expresiones regulares

Si necesita hacer regex buscar en title de master documento también, puede agregarlo a su $or consulta del $match etapa, y si no quieres eso, no olvides eliminar de la consulta $or (la he agregado).

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

Ahora, mi php no es tan bueno, aún así logré escribir la consulta para usted. Cambie/modifique el código según sus necesidades.

La cosa es que te di la idea de cómo lograr esto. Espero que ayude.

Editar

Para sort y limit , use $sort y $limit etapas de canalización, lo he agregado en respuesta.

No olvide reemplazar field_name con el campo real con el que desea ordenar el resultado.