sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDb Gå med i frågan med PHP

Du kan använda aggregeringspipeline för det

  1. Använd $lookup för att gå med i de två samlingarna,
  2. $unwind den resulterande arrayen från $lookup steg
  3. $match för att göra regex-sökningen

Om du behöver göra regex sök på title av master dokument också, du kan lägga till det i din $or fråga för $match steg, och om du inte vill det, glöm inte att ta bort från $or-frågan (jag har lagt till den).

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

Nu är min php inte så bra, ändå har jag lyckats skriva frågan åt dig. Vänligen ändra/ändra koden efter dina behov.

Saken är att jag gav dig idén om hur du ska uppnå detta. Hoppas det hjälper.

Redigera

För att sort och limit , använd $sort och $limit pipeline stadier, jag har lagt till det som svar.

Glöm inte att ersätta field_name med det faktiska fältet du vill sortera resultatet med.




  1. ställ in standardvärden till mongoose-arrayer i node js

  2. redis cluster reshard [ERR] Anropar MIGRATE:ERR Syntaxfel

  3. Hur tillåter man nollfält när man uppdaterar i Mongoose?

  4. Spring Data RedisMall:Serialisera värdet och HashValue